En Magento 1, si desea pasar datos de su acción Controlador a la "Vista" (es decir, un bloque en su diseño, puede hacerlo)
Agregue un valor / objeto al registro global a través de
Mage::register
Obtener directamente un objeto de bloque y establecer propiedades de datos en el objeto de bloque obtenido después de ejecutar
loadLayout
Llame a métodos sobre objetos de bloque en
phtml
archivos y haga que los objetos de bloque usen la capa de modelo / base de datos para leer datos previamente guardados en la acción del controlador
El uso de métodos de objetos de bloque para leer de la base de datos todavía parece funcionar en Magento 2, lo cual es apropiado para ciertos tipos de operaciones. Sin embargo,
Ya no hay un registro global en Magento 2 (¿o sí?)
El sistema de diseño ahora funciona creando un objeto de página a través de una fábrica, y no puede tomar referencias de bloque de la misma manera que en Magento 1
¿Es posible en Magento 2 pasar datos directamente desde una acción del controlador a una vista? ¿O es esto un patrón demasiado directo para el nuevo y valiente mundo Design Pattern ™ de Magento? Si este es un patrón demasiado directo, ¿qué debería estar haciendo si hay alguna información calculada que queremos mostrar en una plantilla, pero no queremos almacenar esa información en un sistema con estado (es decir, no queremos guardarla en el base de datos)
Puedo pensar en una forma diferente de hackear esto juntos, pero estoy interesado en cómo Magento 2 quiere que lo hagas.
Nota : Me doy cuenta de que es posible recuperar una instancia de bloque en una acción de controlador usando algo como esto
$resultPage = $this->resultPageFactory->create();
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
var_dump(spl_object_hash($block));
El código central de Magento 2 hace esto a menudo. Sin embargo, el objeto de bloque obtenido en el objeto controlador parece ser un objeto diferente del que está disponible en una phtml
plantilla a través de cualquiera $this
o $block
(el primero ( $this
) parece ser el objeto que realmente representa la plantilla, mientras que el posterior ( $block
) parece ser una instancia del tipo de bloque Magento).
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
Digo "parece ser" porque si configuro los datos en el método de acción del controlador, no está disponible en la phtml
plantilla, y si comparo los spl_object_hash
resultados anteriores, obtengo tres valores hash diferentes. Sin embargo, soy lo suficientemente nuevo en todo esto como para que lo anterior sea otro error que haya cometido, por lo que si ha podido configurar los datos en bloques y buscarlos en una plantilla, me encantaría saberlo !
Usted debe no pasar variables de Acción controlador para Vista. Use block to para pasar Variables a Vista (motor de plantillas).
fuente