In Magento 1, se si desidera passare i dati dall'azione del Controller alla "Visualizza" (ovvero un blocco nel layout, è possibile)
Aggiungere un valore / oggetto al registro globale tramite
Mage::register
Recupera direttamente un oggetto blocco e imposta le proprietà dei dati sull'oggetto blocco recuperato dopo l'esecuzione
loadLayout
Chiamare metodi su oggetti blocco nei
phtml
file e fare in modo che gli oggetti blocco utilizzino il livello modello / database per leggere i dati precedentemente salvati nell'azione del controller
L'uso dei metodi a blocchi di oggetti per leggere dal database sembra funzionare ancora in Magento 2, il che è appropriato per alcuni tipi di operazioni. Tuttavia,
Non c'è più un registro globale in Magento 2 (o c'è?)
Il sistema di layout ora funziona creando un oggetto pagina tramite una factory e non è possibile afferrare i riferimenti di blocco nello stesso modo in Magento 1
In Magento 2 è possibile passare i dati direttamente da un'azione del controller a una vista? Oppure questo è un modello troppo diretto per il nuovo coraggioso mondo di Design Pattern ™ di Magento? Se questo è un modello troppo diretto, cosa dovrebbe fare se ci sono alcune informazioni calcolate che vogliamo visualizzare in un modello, ma non vogliamo archiviarle in un sistema con stato (cioè non vogliamo salvarle nel Banca dati)
Posso pensare a un modo diverso di hackerare questo insieme da solo - ma sono interessato a come Magento 2 vuole che tu lo faccia.
Nota : mi rendo conto che è possibile recuperare un'istanza di blocco in un'azione del controller usando qualcosa del genere
$resultPage = $this->resultPageFactory->create();
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
var_dump(spl_object_hash($block));
Il codice core di Magento 2 lo fa spesso. Tuttavia, l'oggetto di blocco recuperato nell'oggetto controller sembra essere un oggetto diverso da quello disponibile in un phtml
modello tramite uno $this
o $block
(il primo ( $this
) sembra essere l'oggetto che rende effettivamente il modello, mentre il successivo ( $block
) sembra essere un'istanza del tipo di blocco Magento).
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
Dico "sembra essere" perché se imposto i dati nel metodo di azione del controller, non sono disponibili nel phtml
modello - e se confronto i spl_object_hash
risultati sopra, ottengo tre hash diversi. Tuttavia, sono abbastanza nuovo per tutto ciò che quanto sopra potrebbe essere un altro errore che ho fatto - quindi se sei stato in grado di impostare i dati su blocchi e recuperarli in un modello mi piacerebbe sentirne parlare !