Uso de la clase de fábrica de páginas en magento2

19

¿Cuál es el propósito de representar la página del módulo personalizado en Magento2 utilizando la \Magento\Framework\View\Result\PageFactoryclase de fábrica de resultados inyectada en el constructor y haciendo que la página se muestre

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

en lugar de hacer el siguiente tipo de pantalla que es igual que en el enfoque Magento 1.x

$this->_view->loadLayout();

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

Respuestas:

16

En realidad no es necesario devolver una instancia de \Magento\Framework\View\Result\Page. Se executeespera que devuelva una instancia de una clase que implementa la interfaz \Magento\Framework\Controller\ResultInterface.

\Magento\Framework\View\Result\PageEs solo un posible retorno.
Otros posibles retornos son

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

y puede haber otros
Echa un vistazo al método Magento\Framework\App\Action\Action::dispatch().
Esto debería devolver una instancia \Magento\Framework\Controller\ResultInterfacey, en función del resultado, se toman diferentes acciones, nuevamente llamando a los métodos declarados en ResultInterface.
Este dispatchmétodo llama $result = $this->execute();cuál es el executemétodo de la acción del controlador. Así que supongo que esto es por coherencia y para facilitar la introducción de un comportamiento diferente para una acción del controlador. Solo necesita agregar una nueva clase que implemente ResultInterfacey todo será manejado por el marco.

Marius
fuente
3

Creo que la idea era devolver datos / modelos de los controladores, pero la implementación actual también me parece extraña.

Personalmente espero que los controladores no devuelvan nada, tal vez solo redirijan a otra url. Para el diseño de la página necesita agregar ruta en esta página estará disponible.

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

JSON estará disponible desde la API de descanso

Kandy
fuente