У Magento 1, якщо ви хочете передати дані з вашої дії контролера до "Перегляду" (тобто блоку в макеті, ви можете)
Додайте значення / об'єкт до глобального реєстру через
Mage::registerБезпосередньо отримати об’єкт блоку та встановити властивості даних на вилученому об’єкті блоку після запуску
loadLayoutМетоди виклику блокових об'єктів у
phtmlфайлах, а об'єкти блоків використовують шар моделі / бази даних для зчитування раніше збережених даних у дії контролера
Використання методів блокових об’єктів для зчитування з бази даних все ще працює в Magento 2 - що підходить для певних видів операцій. Однак,
У Magento 2 більше немає глобального реєстру (або він є?)
Тепер система компонування працює, створюючи об’єкт сторінки через фабрику, і ви не можете захопити посилання блоків так само, як це можливо в Magento 1
Чи можливо в Magento 2 передавати дані безпосередньо від дії контролера до перегляду? Або це занадто прямий зразок для сміливого нового дизайну Magento World ™ ™? Якщо це занадто пряма закономірність, що робити, якщо є якась обчислена інформація, яку ми хочемо відобразити в шаблоні, але ми не хочемо зберігати цю інформацію в стані (тобто ми не хочемо зберігати її в база даних)
Я можу придумати кілька різних способів зламати це разом самостійно - але мене цікавить, як 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 Block).
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
Я кажу "здається, що", тому що якщо я встановив дані методом дії контролера, це не доступно в phtmlшаблоні - і якщо я порівняю spl_object_hashрезультати вище, я отримаю три різних хеша. Однак я достатньо новий у всьому цьому, що вищезгадане може бути якоюсь іншою помилкою, яку я зробив - тому, якщо ви змогли встановити дані на блоки та отримати їх у шаблоні, я хотів би почути про це !