У 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
результати вище, я отримаю три різних хеша. Однак я достатньо новий у всьому цьому, що вищезгадане може бути якоюсь іншою помилкою, яку я зробив - тому, якщо ви змогли встановити дані на блоки та отримати їх у шаблоні, я хотів би почути про це !