magento2でのページファクトリクラスの使用


19

\Magento\Framework\View\Result\PageFactoryコンストラクターに挿入された結果ファクトリクラスを使用してMagento2でカスタムモジュールページをレンダリングし、表示するページを作成する目的は何ですか

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

Magento 1.xのアプローチと同じように、以下のような表示を行うのではなく、

$this->_view->loadLayout();

$this->_view->renderLayout();

回答:


16

実際には、のインスタンスを返す必要はありません\Magento\Framework\View\Result\Pageexecuteインタフェースを実装するクラスのインスタンスを返すことが期待されています\Magento\Framework\Controller\ResultInterface

\Magento\Framework\View\Result\Page1つの可能な戻り値です。
その他の可能な返品は

  • \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>

JSONはREST APIから利用可能になります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.