O novo jeito de criar controllers no Magento 2
Desenvolvimento, Magento 2
Publicado em 02 de novembro de 2020
O Magento está sempre em evolução, e como desenvolvedores devemos sempre estar atentos aos avisos de classes e métodos depreciados. Eles geralmente são removidos na versão seguinte e se nada fizermos, certamente teremos problemas.
Uma destas classes é a Magento\Framework\App\Action\Action
. Ela é a classe que a maioria dos Controllers do Magento estendem. Nós falamos dela na Série sobre Controllers aqui no Magenteiro.
No entanto, à partir da versão 2.4 do Magento, ela passou a ser sinalizada como @deprecated
(depreciada).
Em outras palavras, é chegada a hora de começar a escrever nossos novos controllers de outra forma.
Este artigo surgiu à partir da contribuição de Gabriel Ribeiro no grupo exclusivo de alunos, em seu feedback sobre a aula sobre Controllers do Magento 2: O Curso. Vem estudar com a gente!
Mudança esperada há muito tempo
Esta mudança foi muito esperada, e contou com a colaboração do Vinai Kopp – instrutor aqui do Magenteiro. Tudo começou ainda em 2018, mas só agora suas contribuições foram trabalhadas e colocadas em prática na nova versão do Magento.
Por padrão, todas as ações de Controllers no Magento implementavam \Magento\Framework\App\ActionInterface
. Mas por conta de outros comportamentos do processamento do Magento (disparo de eventos, autorizações, etc) eram implementados dentro de classes como \Magento\Framework\App\Action\Action
e \Magento\Backend\App\AbstractAction
. Desta forma, se a action de um controller implementava a ActionInterface
mas não herdava uma das classes acima, ela não funcionaria mais.
O principal objetivo da mudança foi:
- fazer com que os desenvolvedores não precisem estender qualquer classe para criar um controller. Implementar
\Magento\Framework\App\ActionInterface
deveria ser suficiente. - depreciar (remover) controllers como
\Magento\Backend\App\AbstractAction
,\Magento\Framework\App\Action\Action, \Magento\Framework\App\Action\AbstractAction
Resumidamente o que a mudança traz é o fim do uso de herança para criação de um controller. Entre outros benefícios, isso reduz a duplicação de código, classes chumbadas, e outros problemas desse tipo de implementação.
Ok, chega de teoria.
Exemplo de um Controller no Magento 2 (Antes)
<?php namespace Magenteiro\TestController\Controller\Test; use Magento\Framework\View\Result\PageFactory; class Index extends \Magento\Framework\App\Action\Action { /** * @var PageFactory */ private PageFactory $resultPageFactory; public function __construct(PageFactory $resultPageFactory) { $this->resultPageFactory = $resultPageFactory; } public function execute() { return $this->resultPageFactory->create(); } }
Exemplo da nova implementação (Depois)
<?php namespace Magenteiro\TestController\Controller\Test; use Magento\Framework\App\Action\HttpGetActionInterface; use Magento\Framework\View\Result\PageFactory; class Index implements HttpGetActionInterface { /** * @var PageFactory */ private PageFactory $resultPageFactory; public function __construct(PageFactory $resultPageFactory) { $this->resultPageFactory = $resultPageFactory; } public function execute() { return $this->resultPageFactory->create(); } }
Como você pode ver, ao invés de estender uma classe, agora implementamos uma interface.
Uau! Que bonito! Tem mais benefícios? Tem sim.
Benefícios de Performance
Além dos benefícios já mencionados acima, de acordo com os testes do autor há melhorias de performance e consumo de processamento.
- Controllers como
customer/account/logoutSuccess
tiveram redução de 5% no uso de CPU durante sua geração.
- Controllers mais complexos como
customer/section/load
tiveram redução de mais de 30% no tempo de uso de processamento.
- Controllers comuns como
catalog/category/view
tiveram melhora de 10% no tempo de uso de processamento.
Quer saber mais? Confira os links e fontes usados neste artigo. Todos em Inglês.
- Artigo principal de lbajsarowiczpl (mantenedor do core do Magento)
- Reutilização de código
Não deixe de conhecer os cursos de Magento do Magenteiro.com.
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-2/fim-do-app_action-nos-controllers/"]