os dois códigos são iguais?
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
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.