Verwendung der Page-Factory-Klasse in magento2

19

Was ist der Zweck des Renderns der benutzerdefinierten Modulseite in Magento2 unter Verwendung der \Magento\Framework\View\Result\PageFactoryim Konstruktor eingefügten Ergebnis-Factory- Klasse und des Anzeigens der Seite ?

$resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);

anstatt diese unter Art der Anzeige, die in Magento 1.x Ansatz identisch ist

$this->_view->loadLayout();

$this->_view->renderLayout();
Niranjan B
quelle

Antworten:

16

Eigentlich ist es nicht notwendig, eine Instanz von zurückzugeben \Magento\Framework\View\Result\Page. Es executewird erwartet, dass das eine Instanz einer Klasse zurückgibt, die die Schnittstelle implementiert \Magento\Framework\Controller\ResultInterface.

\Magento\Framework\View\Result\Pageist nur eine mögliche Rückkehr.
Andere mögliche Rückgaben sind

  • \Magento\Framework\Controller\Result\Redirect
  • \Magento\Framework\Controller\Result\Raw
  • \Magento\Framework\View\Result\Layout
  • \Magento\Framework\Controller\Result\Forward
  • \Magento\Framework\Controller\Result\Json

und es kann andere geben.
Schauen Sie sich die Methode an Magento\Framework\App\Action\Action::dispatch().
Dies sollte eine Instanz von zurückgeben \Magento\Framework\Controller\ResultInterfaceund basierend auf dem Ergebnis werden verschiedene Aktionen ausgeführt, wiederum durch Aufrufen von Methoden, die in der deklariert sind ResultInterface.
Diese dispatchMethode ruft $result = $this->execute();die executeMethode aus der Controller-Aktion auf. Ich schätze, dies dient der Konsistenz und der Erleichterung, ein anderes Verhalten für eine Controller-Aktion einzuführen. Sie müssen nur eine neue Klasse hinzufügen, die implementiert wird, ResultInterfaceund alles wird vom Framework verwaltet.

Marius
quelle
3

Ich glaube, diese Idee bestand darin, Daten / Modelle von Controllern zurückzugeben, aber die aktuelle Implementierung erscheint mir auch seltsam.

Persönlich erwarte ich, dass Controller nichts zurückgeben, vielleicht einfach auf eine andere URL umleiten. Zum Seitenlayout muss eine Route hinzugefügt werden, auf der diese Seite verfügbar sein wird.

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-login">
     <route url="login"/>
    <body>
    </body>
</page>

JSON wird von Rest API verfügbar sein

KAndy
quelle