На самом деле не нужно возвращать экземпляр \Magento\Framework\View\Result\Page
. execute
, Как ожидается, возвращает экземпляр класса , который реализует интерфейс \Magento\Framework\Controller\ResultInterface
.
\Magento\Framework\View\Result\Page
это только один возможный возврат.
Другие возможные возвраты
\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
и могут быть другие.
взгляните на метод Magento\Framework\App\Action\Action::dispatch()
.
Это должно вернуть экземпляр \Magento\Framework\Controller\ResultInterface
и в зависимости от результата предпринять различные действия, снова вызывая методы, объявленные в ResultInterface
.
Этот dispatch
метод вызовы , $result = $this->execute();
который является execute
методом от действия контроллера. Поэтому я предполагаю, что это для согласованности и упрощения введения другого поведения для действия контроллера. Вам просто нужно добавить новый класс, который реализует, ResultInterface
и все это будет обрабатываться фреймворком.