¿los dos códigos son iguales?
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
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.