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();

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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.