os dois códigos são iguais?

Aug 27 2020

Estou começando a aprender Magento 2 e li algumas instruções para criar o Controller.

Há o index.php. no Magento 2 _ livro de receitas de desenvolvimento e outro no site.

/** @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;
       }

e o outro código que li.

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

Eu vi que, dois códigos mostram a mesma página de layout do Magento. Então, qual é a diferença entre isso?

Respostas

HamendraSunthwal Aug 27 2020 at 14:53

Em geral

No Magento 2, todas as ações do controlador devem retornar algo, ao contrário do M1, onde uma ação do controlador apenas produziria algo ou faria um redirecionamento. O resultado do método execute de cada controlador é gerado Magento\Framework\App\FrontController::dispatch()on-line $result = $actionInstance->execute();e retornado.

Dependendo do tipo de resultado retornado, uma ação diferente é executada. O resultado pode ser uma instância de:

  • \Magento\Framework\View\Result\Page - realmente renderiza html

  • \Magento\Framework\Controller\Result\Redirect - redireciona para outra página

  • \Magento\Framework\Controller\Result\Forward - encaminha para outra ação (redirecionamento interno)

  • \Magento\Framework\Controller\Result\Json - retorna um objeto json.

  • \Magento\Framework\Controller\Result\Raw - retorna o que você disser para retornar (string).

Específico

resultPageFactoryé uma instância de \Magento\Framework\View\Result\PageFactorye ao chamar create nessa classe, ele retorna uma instância de \Magento\Framework\View\Result\Pagedescrito acima. Quando isso é usado e o resultado é retornado, significa que sua ação retornará HTML. De alguma forma, tem um efeito semelhante ao $this->loadLayout();do Magento 1. Quando você chama create no objeto resultPageFactory, ele realmente carrega o layout.