Ein Block und ein Modell sind zwei verschiedene Dinge. Dies ist kein Duplikat.
pspahn
Rajeev K Tom Modelle und Blöcke sind völlig anders
theSeeker
Antworten:
20
Veraltet: Antwort bezieht sich auf MAGENTO 2 ALPHA
Ich wünschte es wäre so leicht.
Dies hängt davon ab, von wo aus Sie es instanziieren möchten.
Wenn Sie eine Instanz aus einem anderen Block heraus erstellen möchten, gehen Sie folgendermaßen vor:
aber hier gibt es einen Haken.
Sie müssen ein geschütztes Element für das aufgerufene Modell erstellen _blockFactory, eine Instanz von \Magento\Framework\View\Element\BlockFactoryin den Konstruktor einfügen und es diesem Element var zuweisen.
@Marius $ toplink = $ this-> getLayout () -> getBlock ('top.links') -> toHtml (); Verwenden Sie in Magento 1 für Magento 2 $ this -> _ view-> getLayout () -> getBlock (Full \ Block \ Class \ Name \ Here ') -> toHtml (); Dies führt zu einem Fehler wie diesem. Schwerwiegender Fehler: Aufruf einer Mitgliedsfunktion toHtml () für ein Nicht-Objekt. Wie kann ich toHtml () erhalten?
ND17
Wenn Sie sich in einem Controller befinden, müssen Sie nichts injizieren _view. Es sollte standardmäßig verfügbar sein, obwohl ich denke, dass es jetzt veraltet ist. Ich habe diese Antwort vor 1,5 Jahren geschrieben
Marius
1
@SachinS. Das solltest du nicht mehr benutzen. _viewist jetzt in Controllern veraltet und wird bald verschwinden,
Marius
1
Kann ich mit einem solchen pagefactory-Objekt aufrufen? $ viewPanelPageFactory = $ this-> resultPageFactory-> create (); $ viewPanel = $ viewPanelPageFactory-> getLayout () -> getBlock ('catalog.leftnav') -> toHtml ();
Sushivam
13
Um einen Block zu instanziieren, müssen Sie die
\Magento\Framework\View\LayoutInterfaceKlasse und ihre createBlock()Methode verwenden.
Mit einer Hilfsklasse können Sie dies mit diesem Code tun:
Antworten:
Veraltet: Antwort bezieht sich auf MAGENTO 2 ALPHA
Ich wünschte es wäre so leicht.
Dies hängt davon ab, von wo aus Sie es instanziieren möchten.
Wenn Sie eine Instanz aus einem anderen Block heraus erstellen möchten, gehen Sie folgendermaßen vor:
Gehen Sie in einem Controller folgendermaßen vor:
Aus dem Inneren eines Modells:
aber hier gibt es einen Haken.
Sie müssen ein geschütztes Element für das aufgerufene Modell erstellen
_blockFactory
, eine Instanz von\Magento\Framework\View\Element\BlockFactory
in den Konstruktor einfügen und es diesem Element var zuweisen.Etwas wie das:
Das Instanziieren eines Blocks aus einem Helfer heraus funktioniert genauso wie beim Modell
quelle
_view
. Es sollte standardmäßig verfügbar sein, obwohl ich denke, dass es jetzt veraltet ist. Ich habe diese Antwort vor 1,5 Jahren geschrieben_view
ist jetzt in Controllern veraltet und wird bald verschwinden,Um einen Block zu instanziieren, müssen Sie die
\Magento\Framework\View\LayoutInterface
Klasse und ihrecreateBlock()
Methode verwenden.Mit einer Hilfsklasse können Sie dies mit diesem Code tun:
Dann rufen Sie
$helper->getBlock()
an, wo Sie brauchen.quelle