Cursos Magento

As 7 áreas do Magento

,

Publicado em 05 de julho de 2021

O Magento separa alguns de seus componentes e códigos naquilo que chamamos de “áreas”. Essa separação ocorre em uma das primeiras partes da execução de código. Dependendo de onde o código ou requisição está sendo chamado, o Magento irá ler diferentes pastas.

Consequentemente, diferentes códigos e componentes serão executados e processados.

Por exemplo ao executar uma chamada às APIs REST do Magento, ao invés de ler códigos relacionados à área do frontend, apenas a área de webapi_rest será processada.

Quando criamos Plugins, arquivos de layout, de template e muitos outros arquivos e classes, parte do caminho onde este arquivo se encontra contém a área de execução. Por exemplo:

  • app/code/Empresa/Modulo/etc/frontend/di.xml
  • app/code/Empresa/Modulo/view/adminhtml/web/template/ui/exemplo.html
  • app/code/Empresa/Modulo/etc/webapi_rest/di.xml
  • app/code/Empresa/Modulo/view/base/layout/default.xml
  • app/code/Empresa/Modulo/etc/crontab/di.xml

Tipos de áreas do Magento

Por padrão, existem 7 diferentes áreas:

  • Admin (adminhtml): a porta de entrada desta área é o arquivo pub/index.php. Esta área inclui o código relacionado à área administrativa da loja. A pasta /app/design/adminhtml por exemplo, contém todos os componentes de design relacionados àquilo que vemos ao acessar o painel de administração de uma loja.
  • Storefront (frontend): da mesma forma, o arquivo pub/index.php é a porta de entrada para requisições frontend. Esta área contém os arquivos usados quando um cliente acessa nossa loja e navega por ela. Note que geralmente nosso frontend faz chamadas às API’s do Magento, e estas requisições em especial são processadas em outra área.
  • Basic (base): esta pasta ou área é usada como fallback. Ou seja, se um arquivo for solicitado em frontend ou adminhtml e não existir lá, o Magento tentará buscá-lo na pasta base. Arquivos de design que são usados em frontend e adminhtml geralmente são colocados aqui.
  • Cron (crontab): no pub/cron.php (responsável pelas tarefas agendadas do Magento), a classe \Magento\Framework\App\Cron sempre carregará esta área.
  • Web API REST (webapi_rest): assim como todas as outras API’s, a porta de entrada também é pub/index.php. Quando uma chamada é feita ao Controller da API Rest (geralmente /rest/V1) esta área é utilizada.
  • GraphQL (graphql): área usada nas chamadas às APIs GraphQL do Magento
  • Web API SOAP (webapi_soap): área usada nas chamadas à API SOAP (alguém ainda usaria isso?).

Como as áreas funcionam em conjunto com os módulos

Um módulo pode influenciar diversas áreas da loja. Por exemplo o módulo de catálogo (Magento_Catalog). Ele modifica páginas visíveis pelo usuário (frontend), oferece recursos para gerenciar produtos na área administrativa (adminhtml), e oferece suporte à API’s. Além de possuir tarefas que são executadas de tempos em tempos (crontab).

Lembre-se que:

  • Módulos não devem depender de áreas definidas em outros módulos
  • Desabilitar uma área não desabilita módulos que usam ou implementam mudanças nesta área
  • Áreas são registradas no di.xml do framework Magento
Quadrados representando áreas do Magento

Processamento da área

Como já vimos no Magento 2: O Curso, quando uma requisição é feita para o Magento, ele quebrará a URL em pelo menos 3 partes: frontName, pasta do controller, e classe do controller.

Ex: loja.com.br/customer/account/create

  • frontName: customer
  • pasta do controller: account
  • classe do controller: create

O Magento usa o frontName para determinar a que tipo de área esta requisição pertence. Podemos ver isso em \Magento\Framework\App\Http::launch, um dos primeiros métodos a ser executado em todas as requisições do Magento que passam por pub/index.php.

public function launch()
{
    $areaCode = $this->_areaList->getCodeByFrontName($this->_request->getFrontName());
    $this->_state->setAreaCode($areaCode);
    #...

Note que no caso do crontab, o arquivo de entrada não é o pub/index.php, mas sim o pub/cron.php e a área a ser executada é definida de forma direta por ele em \Magento\Framework\App\Cron::launch.

Conclusão

Em muitos casos o Magento nos permite realizar uma implementação que afetará todas as áreas do sistema.

A injeção de dependência por exemplo, é feita pelo arquivo di.xml. Ele pode ser colocado diretamente dentro da pasta /etc/ de nosso módulo e ser lido pelo Magento em todas as requisições.

No entanto, se soubermos quais áreas temos à nossa disposição, e nos dermos ao trabalho de separar cada implementação em sua pasta correta, teremos um ganho de performance e organização. Afinal ficará muito mais fácil encontrar uma customização e entender que áreas nosso componente influencia em nossa loja.

Referência: Documentação Oficial (em Inglês)

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/7-areas-do-magento/"]