Wykorzystanie klasy fabryki stron w magento2


19

Jaki jest cel renderowania niestandardowej strony modułu w Magento2 przy użyciu \Magento\Framework\View\Result\PageFactoryklasy fabrycznej wyników wstrzykniętej do konstruktora i spowodowania wyświetlenia strony

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

zamiast robić te poniższe rodzaje wyświetlania, które są takie same jak w podejściu Magento 1.x.

$this->_view->loadLayout();

$this->_view->renderLayout();

Odpowiedzi:


16

W rzeczywistości nie jest konieczne zwracanie wystąpienia \Magento\Framework\View\Result\Page. executeOczekuje się powrócić wystąpienie klasy realizującym interfejs \Magento\Framework\Controller\ResultInterface.

\Magento\Framework\View\Result\Pageto tylko jeden możliwy zwrot.
Inne możliwe zwroty to

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

i mogą być inni.
spójrz na metodę Magento\Framework\App\Action\Action::dispatch().
Powinno to zwrócić instancję \Magento\Framework\Controller\ResultInterfacei na podstawie wyniku podejmowane są różne działania, ponownie poprzez wywołanie metod zadeklarowanych w pliku ResultInterface.
Ta dispatchmetoda połączenia $result = $this->execute();, które jest executemetoda z działania kontrolera. Sądzę więc, że ma to na celu zachowanie spójności i ułatwienie wprowadzenia innego zachowania dla akcji kontrolera. Musisz tylko dodać nową klasę, która implementuje ResultInterfacei wszystko będzie obsługiwane przez framework.


3

Uważam, że pomysł polegał na zwróceniu danych / modeli ze sterowników, ale obecna implementacja również wygląda dla mnie dziwnie.

Osobiście oczekuję, że kontrolery niczego nie zwracają, może po prostu przekierowują na inny adres URL. Do układu strony trzeba dodać trasę, dzięki której strona będzie dostępna.

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

JSON będzie dostępny z interfejsu API reszty

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.