Uso da classe de fábrica de páginas no magento2

19

Qual é o objetivo de renderizar a página do módulo personalizado no Magento2 usando a \Magento\Framework\View\Result\PageFactoryclasse de fábrica de resultado injetada no construtor e tornar a página exibida

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

em vez de fazer esses tipos de exibição abaixo, que são os mesmos da abordagem Magento 1.x

$this->_view->loadLayout();

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

Respostas:

16

Na verdade, não é necessário retornar uma instância de \Magento\Framework\View\Result\Page. O executeé esperado para retornar uma instância de uma classe que implementa a interface \Magento\Framework\Controller\ResultInterface.

\Magento\Framework\View\Result\Pageé apenas um retorno possível.
Outros retornos possíveis são

  • \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 pode haver outros.
dê uma olhada no método Magento\Framework\App\Action\Action::dispatch().
Isso deve retornar uma instância \Magento\Framework\Controller\ResultInterfacee, com base no resultado, diferentes ações são executadas, novamente chamando métodos declarados em ResultInterface.
Este dispatchmétodo chama $result = $this->execute();qual é o executemétodo da ação do controlador. Portanto, acho que isso é consistente e facilita a introdução de um comportamento diferente para uma ação do controlador. Você só precisa adicionar uma nova classe que implementa ResultInterfacee tudo será tratado pela estrutura.

Marius
fonte
3

Acredito que a idéia foi retornar dados / modelos dos controladores, mas a implementação atual também me parece estranha.

Pessoalmente, espero que os controladores não retornem nada, talvez apenas redirecionem para outro URL. Para o layout da página, a adição de rotas com esta página estará disponível.

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

JSON estará disponível a partir do resto da API

KAndy
fonte