Wenn Sie in Magento 1 Daten aus Ihrer Controller-Aktion an die "Ansicht" übergeben möchten (dh einen Block in Ihrem Layout, können Sie)
Fügen Sie der globalen Registrierung über einen Wert / ein Objekt hinzu
Mage::register
Rufen Sie direkt ein Blockobjekt ab und legen Sie nach der Ausführung die Dateneigenschaften für das abgerufene Blockobjekt fest
loadLayout
Rufen Sie Methoden für Blockobjekte in
phtml
Dateien auf und lassen Sie die Blockobjekte die Modell- / Datenbankschicht verwenden, um Daten zu lesen, die zuvor in der Controller-Aktion gespeichert wurden
Das Verwenden von Blockobjektmethoden zum Lesen aus der Datenbank scheint in Magento 2 weiterhin zu funktionieren - was für bestimmte Arten von Vorgängen geeignet ist. Jedoch,
Es gibt keine globale Registrierung mehr in Magento 2 (oder?)
Das Layout-System erstellt nun ein Seitenobjekt über eine Factory. Sie können Blockreferenzen nicht mehr wie in Magento 1 erfassen
Ist es in Magento 2 möglich, Daten direkt von einer Controller-Aktion an eine Ansicht weiterzuleiten? Oder ist dies ein zu direktes Muster für Magentos schöne neue Design Pattern ™ -Welt? Wenn dies ein zu direktes Muster ist, was ist zu tun, wenn einige berechnete Informationen in einer Vorlage angezeigt werden sollen, diese Informationen jedoch nicht in einem statusbehafteten System gespeichert werden sollen (dh, wir möchten sie nicht im System speichern) Datenbank)
Ich kann mich ein paar andere Möglichkeit , diese zusammen mich zu hacken - aber ich bin daran interessiert, wie Magento 2 will man es tun.
Hinweis : Mir ist klar, dass es mit so etwas möglich ist, eine Blockinstanz in einer Controller-Aktion abzurufen
$resultPage = $this->resultPageFactory->create();
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
var_dump(spl_object_hash($block));
Der Magento 2-Kerncode tut dies oft. Das im Controller-Objekt abgerufene Blockobjekt scheint jedoch ein anderes Objekt zu sein als es in einer phtml
Vorlage über $this
oder verfügbar ist $block
(das erstere ( $this
) scheint das Objekt zu sein, das die Vorlage tatsächlich wiedergibt, während das letztere ( $block
) zu sein scheint) eine Instanz vom Typ Magento Block).
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
Ich sage "scheint zu sein", weil wenn ich Daten in der Controller-Aktionsmethode festlege, diese in der phtml
Vorlage nicht verfügbar sind - und wenn ich die spl_object_hash
obigen Ergebnisse vergleiche , erhalte ich drei verschiedene Hashes. Ich bin jedoch neu genug für all das, dass das oben Genannte ein anderer Fehler sein könnte, den ich gemacht habe. Wenn Sie also in der Lage waren, Daten für Blöcke festzulegen und sie in einer Vorlage abzurufen, würde ich gerne davon erfahren !