В Magento 1, если вы хотите передать данные из действия вашего контроллера в «представление» (т. Е. Блок в макете, вы можете)
Добавить значение / объект в глобальный реестр через
Mage::registerНепосредственная выборка объекта блока и установка свойств данных для извлеченного объекта блока после запуска
loadLayoutВызовите методы для блочных объектов в
phtmlфайлах, и пусть блочные объекты используют слой модели / базы данных для чтения данных, ранее сохраненных в действии контроллера
Использование методов блочных объектов для чтения из базы данных по-прежнему работает в Magento 2, что подходит для определенных видов операций. Тем не мение,
В Magento 2 больше нет глобального реестра (или есть?)
Система макетов теперь работает, создавая объект страницы через фабрику, и вы не можете получить ссылки на блоки так же, как в Magento 1
Возможно ли в Magento 2 передавать данные непосредственно из действия контроллера в представление? Или это слишком прямой образец для храброго нового мира Design Pattern ™ от Magento? Если это слишком прямой шаблон, что делать, если есть некоторая вычисленная информация, которую мы хотим отобразить в шаблоне, но не хотим сохранять эту информацию в системе с состоянием (то есть мы не хотим сохранять ее в база данных)
Я могу придумать несколько разных способов взломать это вместе, но мне интересно, как Magento 2 хочет , чтобы вы это делали.
Примечание : я понимаю, что можно получить экземпляр блока в действии контроллера, используя что-то вроде этого
$resultPage = $this->resultPageFactory->create();
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
var_dump(spl_object_hash($block));
Код ядра Magento 2 делает это часто. Однако - блочный объект, извлеченный в объекте контроллера, кажется, отличается от того, который доступен в phtmlшаблоне с помощью либо, $thisлибо $block(прежний ( $this) представляется объектом, который фактически отображает шаблон, тогда как более поздний ( $block) выглядит как экземпляр типа блока Magento).
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
Я говорю «кажется», потому что, если я устанавливаю данные в методе действия контроллера, они не доступны в phtmlшаблоне - и если я сравниваю spl_object_hashрезультаты выше, я получаю три разных хэша. Тем не менее, я достаточно новичок во всем этом, что вышеупомянутое может быть какой-то другой ошибкой, которую я сделал - поэтому, если вы смогли установить данные для блоков и извлечь их в шаблоне, я бы хотел услышать об этом !