Sind die beiden Codes gleich?

Aug 27 2020

Ich fange an, Magento 2 zu lernen und lese einige Anweisungen zum Erstellen von Controller.

Es gibt die index.php. auf Magento 2 _ Entwicklungskochbuch und ein weiteres auf der Website.

/** @var \Magento\Framework\View\Result\PageFactory  */
       protected $resultPageFactory; public function __construct( \Magento\Framework\App\Action\Context $context,
           \Magento\Framework\View\Result\PageFactory
$resultPageFactory ){ $this->resultPageFactory = $resultPageFactory; parent::__construct($context);
       }
       public function execute()
       {
$resultPage = $this->resultPageFactory->create();
           return $resultPage;
       }

und der andere Code, den ich gelesen habe.

 class Index extends Action
{
    public function execute()
    {
        $this->_view->loadLayout();
        $this->_view->renderLayout();`

Ich habe gesehen, dass zwei Codes die gleiche Layoutseite Magento anzeigen. Also, was macht der Unterschied zwischen dem? `

Antworten

HamendraSunthwal Aug 27 2020 at 14:53

Allgemeines

In Magento 2 müssen alle Controller-Aktionen etwas zurückgeben, im Gegensatz zu M1, wo eine Controller-Aktion nur etwas ausgeben oder eine Umleitung durchführen würde. Das Ergebnis der Ausführungsmethode von jedem Controller wird Magento\Framework\App\FrontController::dispatch()online generiert $result = $actionInstance->execute();und zurückgegeben.

Abhängig von der Art des zurückgegebenen Ergebnisses wird eine andere Aktion ausgeführt. Das Ergebnis kann eine Instanz sein von:

  • \ Magento \ Framework \ View \ Result \ Page - rendert tatsächlich HTML

  • \ Magento \ Framework \ Controller \ Result \ Redirect - leitet zu einer anderen Seite weiter

  • \ Magento \ Framework \ Controller \ Result \ Forward - Weiterleitung an eine andere Aktion (interne Umleitung)

  • \ Magento \ Framework \ Controller \ Result \ Json - Gibt ein JSON-Objekt zurück.

  • \ Magento \ Framework \ Controller \ Result \ Raw - gibt alles zurück, was Sie zurückgeben sollen (Zeichenfolge).

Spezifisch

resultPageFactoryist eine Instanz von \Magento\Framework\View\Result\PageFactoryund beim Aufrufen von create für diese Klasse wird eine \Magento\Framework\View\Result\Pageoben beschriebene Instanz von zurückgegeben . Wenn dies verwendet wird und das Ergebnis zurückgegeben wird, bedeutet dies, dass Ihre Aktion HTML zurückgibt. Es hat einen ähnlichen Effekt wie $this->loadLayout();Magento 1. Wenn Sie create für das resultPageFactory-Objekt aufrufen, wird das Layout tatsächlich geladen.