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\ResultInterface
e, com base no resultado, diferentes ações são executadas, novamente chamando métodos declarados em ResultInterface
.
Este dispatch
método chama $result = $this->execute();
qual é o execute
mé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 ResultInterface
e tudo será tratado pela estrutura.