En realidad no es necesario devolver una instancia de \Magento\Framework\View\Result\Page
. Se execute
espera que devuelva una instancia de una clase que implementa la interfaz \Magento\Framework\Controller\ResultInterface
.
\Magento\Framework\View\Result\Page
Es 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\ResultInterface
y, en función del resultado, se toman diferentes acciones, nuevamente llamando a los métodos declarados en ResultInterface
.
Este dispatch
método llama $result = $this->execute();
cuál es el execute
mé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 ResultInterface
y todo será manejado por el marco.