В 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
результаты выше, я получаю три разных хэша. Тем не менее, я достаточно новичок во всем этом, что вышеупомянутое может быть какой-то другой ошибкой, которую я сделал - поэтому, если вы смогли установить данные для блоков и извлечь их в шаблоне, я бы хотел услышать об этом !