Penggunaan kelas halaman pabrik di magento2

19

Apa tujuan merender halaman modul khusus di Magento2 menggunakan \Magento\Framework\View\Result\PageFactorykelas pabrik hasil yang disuntikkan dalam konstruktor dan membuat halaman untuk ditampilkan

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

daripada melakukan jenis tampilan di bawah ini yang sama seperti pada pendekatan Magento 1.x

$this->_view->loadLayout();

$this->_view->renderLayout();
Niranjan B
sumber

Jawaban:

16

Sebenarnya tidak perlu mengembalikan instance dari \Magento\Framework\View\Result\Page. The executediharapkan untuk kembali sebuah instance dari kelas yang mengimplementasikan interface \Magento\Framework\Controller\ResultInterface.

\Magento\Framework\View\Result\Pagehanya satu kemungkinan kembali.
Kemungkinan pengembalian lainnya adalah

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

dan mungkin ada yang lain.
lihat metode ini Magento\Framework\App\Action\Action::dispatch().
Ini harus mengembalikan instance \Magento\Framework\Controller\ResultInterfacedan berdasarkan hasil tindakan yang berbeda diambil, lagi dengan memanggil metode yang dinyatakan dalam ResultInterface. Metode
ini dispatchmemanggil $result = $this->execute();yang merupakan executemetode dari aksi pengontrol. Jadi saya kira ini untuk konsistensi dan untuk membuatnya lebih mudah untuk memperkenalkan perilaku yang berbeda untuk aksi pengontrol. Anda hanya perlu menambahkan kelas baru yang mengimplementasikan ResultInterfacedan semuanya akan ditangani oleh framework.

Marius
sumber
3

Saya percaya bahwa ide mengembalikan data / model dari pengendali, tetapi implementasi saat ini terlihat aneh bagi saya juga.

Secara pribadi saya berharap bahwa pengendali tidak mengembalikan apa pun, mungkin hanya mengarahkan ke url lain. Untuk tata letak halaman perlu menambahkan rute dengan halaman ini akan tersedia.

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

JSON akan tersedia dari api sisanya

KAndy
sumber