在magento2中使用页面工厂类


19

使用\Magento\Framework\View\Result\PageFactory在构造函数中注入的结果工厂类在Magento2中呈现自定义模块页面的目的是什么,并使页面显示

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

而不是像在Magento 1.x方法中一样进行以下显示

$this->_view->loadLayout();

$this->_view->renderLayout();

Answers:


16

实际上没有必要返回的实例\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所有这些类都将由框架处理。


3

我相信这个想法是从控制器返回数据/模型,但是当前的实现对我来说也很奇怪。

我个人希望控制器不返回任何内容,也许只是重定向到其他URL。要页面布局需要添加此页面上的路线,将可用。

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

REST API将提供JSON

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.