¿los dos códigos son iguales?

Aug 27 2020

Estoy empezando a aprender Magento 2 y leí algunas instrucciones para crear Controller.

Están los index.php. en Magento 2 _ libro de recetas de desarrollo y otro en el sitio web.

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

y el otro código que leí.

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

Vi eso, dos códigos muestran la misma página de diseño Magento. Entonces, ¿cuál es la diferencia entre eso?

Respuestas

HamendraSunthwal Aug 27 2020 at 14:53

General

En Magento 2, todas las acciones del controlador deben devolver algo, a diferencia de M1, donde una acción del controlador solo generaría algo o redirigiría. El resultado del método de ejecución de cada controlador se genera en Magento\Framework\App\FrontController::dispatch()línea $result = $actionInstance->execute();y se devuelve.

Según el tipo de resultado devuelto, se realiza una acción diferente. El resultado puede ser una instancia de:

  • \Magento\Framework\View\Result\Page - en realidad representa html

  • \Magento\Framework\Controller\Result\Redirect - redirige a otra página

  • \Magento\Framework\Controller\Result\Forward: reenvía a otra acción (redireccionamiento interno)

  • \Magento\Framework\Controller\Result\Json: devuelve un objeto json.

  • \Magento\Framework\Controller\Result\Raw: devuelve lo que le diga que devuelva (cadena).

Específico

resultPageFactoryes una instancia de \Magento\Framework\View\Result\PageFactoryy cuando llama a create en esa clase, devuelve una instancia de la \Magento\Framework\View\Result\Pagedescrita anteriormente. Cuando se usa esto y se devuelve el resultado, significa que su acción devolverá HTML. De alguna manera tiene un efecto similar al $this->loadLayout();de Magento 1. Cuando llamas a create en el objeto resultPageFactory, en realidad carga el diseño.