Utilizzo della classe factory di pagina in magento2


19

Qual è lo scopo di rendere la pagina del modulo personalizzata in Magento2 usando la \Magento\Framework\View\Result\PageFactoryclasse factory risultante iniettata nel costruttore e fare in modo che la pagina venga visualizzata

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

piuttosto che fare questo tipo di display sotto che è uguale all'approccio Magento 1.x.

$this->_view->loadLayout();

$this->_view->renderLayout();

Risposte:


16

In realtà non è necessario restituire un'istanza di \Magento\Framework\View\Result\Page. Si executeprevede che restituisca un'istanza di una classe che implementa l'interfaccia \Magento\Framework\Controller\ResultInterface.

\Magento\Framework\View\Result\Pageè solo un possibile ritorno.
Altri possibili resi sono

  • \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

e potrebbero essercene altri.
dai un'occhiata al metodo Magento\Framework\App\Action\Action::dispatch().
Ciò dovrebbe restituire un'istanza \Magento\Framework\Controller\ResultInterfacee in base al risultato vengono intraprese diverse azioni, richiamando nuovamente i metodi dichiarati in ResultInterface.
Questo dispatchmetodo chiama $result = $this->execute();quale è il executemetodo dall'azione del controller. Quindi suppongo che questo sia per coerenza e per facilitare l'introduzione di un comportamento diverso per un'azione del controller. Devi solo aggiungere una nuova classe che implementa ResultInterfacee sarà gestita dal framework.


3

Credo che l'idea fosse quella di restituire dati / modelli dai controller, ma l'attuale implementazione sembra strana anche per me.

Personalmente mi aspetto che i controller non restituiscano nulla, forse semplicemente reindirizzano ad altri URL. Per l'impaginazione è necessario aggiungere il percorso su con questa pagina sarà disponibile.

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

JSON sarà disponibile da api di riposo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.