Neste artigo vamos entender um pouco mais sobre a estrutura de diretórios do Magento 2, explicando cada um dos diretórios/pastas do Magento 2.

app

O primeiro diretório que vamos abordar neste artigo é um dos diretórios principais no Magento 2. Ou melhor, não só Magento 2, pois no Magento 1 ele já existia.
Dentro deste diretório, encontram-se os módulos, temas e traduções do projeto. Além disso, as configurações globais da aplicação também ficam dentro desse diretório.
Observe no código abaixo a estrutura do diretório app.
app
    code
        Magento
        MagedIn
    design
        adminhtml
        frontend
etc
    config.php
    env.php
    -------
i18n
    Magento
    MagedIn
autoload.php
bootstrap.php
functions.php

A primeira subpasta que vimos no exemplo acima é code. Esta pasta já existia no Magento 1, porém com uma grande diferença… No Magento 1, dentro dela havia três subpastas (code pools): core, local e community. Já no Magento 2, essa divisão por code pool não existe mais.
Dentro de ‘app/code/Magento’, encontram-se todos os módulos nativos da plataforma. Porém, estes arquivos do core só existirão em ‘app/code’ se o Magento tenha sido clonado do repositório oficial no GitHub (https://github.com/magento/magento2). Caso o Magento tenha sido instalado via Composer ou pelo arquivo disponibilizado pelo site do Magento, esta pasta se encontrará vazia e os arquivos dos módulos nativos estarão dentro da pasta ‘vendor’ (diretório padrão do Composer).
Este é o diretório recomendado para os módulos criados especificamente para o projeto em questão.
Além disso, dentro da pasta app temos outras subpastas, tais como: design (contém todos os temas do M2), etc (contém as configurações globais da aplicação), 18in (encontram-se os arquivos responsáveis pela tradução do Magento 2).
Por fim, também temos alguns arquivos PHP usados durante a inicialização do Magento 2.

bin

Contém o arquivo de interface de linha de comando (CLI) do Magento 2. Este é o arquivo binário que nos oferece a possibilidade de executar diversas ações através do terminal.

dev

Possui diversos testes da aplicação (tests), ferramentas para desenvolvedores (tools) e alguns scripts para utilização do TravisCI, uma ferramenta de Continuous Integration (Integração Contínua).
Quando falamos sobre testes no Magento 2, já temos os arquivos do core cobertos pelos seguintes tipos de teste: testes de API, testes de aceitação, testes funcionais, testes de integração, testes de setup, testes de arquivos estáticos e testes unitários.

generated

Nele, ficam todos os arquivos que são gerados automaticamente pela aplicação, como por exemplo: Factories, Proxies, Interceptors, etc…
Se o Magento estiver configurado em developer mode, estes arquivos são gerados automaticamente durante a execução da plataforma. Já em production mode, é necessário complicar a aplicação (através do comando php bin/magento setup:di:compile) para que os mesmos sejam gerados.
OBS: Até a versão 2.1 do Magento 2, esta pasta encontrava-se dentro da pasta ‘var’.

lib

Ele comporta todas as bibliotecas usadas pelo Magento. Estas bibliotecas podem ser de terceiros/externas ou do próprio framework do Magento.
Ele se comporta da mesma forma que a pasta ‘app/code’, ou seja, ela só terá conteúdo caso o Magento tenha sido clonado pelo GitHub. Caso contrário, estes arquivos estarão dentro de ‘vendor’.
Todas as outras bibliotecas utilizadas no Magento 2 que não forem disponibilizadas via Composer devem estar neste diretório.

phpserver

Desde o PHP 5.4, o PHP pode ser executado com um servidor HTTP próprio, bem simples, mas funcional em muitos casos.
O arquivo ‘router.php’, dentro deste diretório contém as configurações necessárias para executar o Magento com o servidor HTTP do próprio PHP. Mais detalhes podem ser encontrados em https://github.com/magento/magento2/tree/2.0/phpserver.
OBS: Por questões de segurança, não é recomendado trabalhar desta forma. O ideal é que você configure seu Magento como ele será no ambiente de produção, ou seja, usando Nginx ou Apache.

pub

Este diretório contém todos os arquivos públicos do Magento. Ele possui arquivos estáticos (como arquivos de CSS, JavaScript), imagens, páginas de erros, etc.
Este deve ser o diretório de entrada das requisições HTTP. Dentro desta pasta, existe um arquivo ‘index.php’, é ele quem deve executar o Magento, e não o arquivo ‘index.php’ da raiz da instalação. Executando o Magento a partir desta pasta, o Magento fica mais seguro, devido ao fato da pasta raiz não ser mais acessível via browser.
Além disso, dentro dele temos mais algumas subpastas e arquivos, com destaque para a pasta ‘static’, a qual contém os arquivos gerados pelo Magento após o deploy em production mode (através do comando bin/magento setup:static-content:deploy) e o arquivo ‘static.php’, responsável pela geração em tempo real dos arquivos de media em developer mode.

setup

Ele possui uma mini aplicação para a instalação do Magento 2. Quando instalamos o Magento através de seu Wizard (via browser), é o conteúdo desta pasta que é renderizado no frontend da loja.

var

Assim como no Magento 1, todos os arquivos temporários gerados pelo Magento, como sessão, arquivos de cache, log, etc, são depositados neste diretório em tempo de execução. Ou seja, todos os arquivos temporários são literalmente colocados dentro desse diretório.

vendor

Por fim, este diretório é o diretório nativo do Composer (https://getcomposer.org/). Nele, ficam todas as dependências do Magento 2, tais como: bibliotecas de terceiros, bibliotecas do próprio Magento, módulos, temas e traduções instalados via Composer.
Como falamos na explicação da pasta ‘app’, se o Magento tiver sido instalado via Composer, ele também vai possuir todos os módulos do core do Magento.
Se você pretende desenvolver um módulo e distribuir o mesmo para a comunidade, o ideal é que você disponibilize-o via Composer, pois é o tipo de instalação recomendada para o Magento 2.

Gostou do conteúdo?
Não perca tempo, veja o conteúdo completo desse artigo e muito mais em nosso canal no Youtube:

https://www.youtube.com/watch?v=OtVNwtMlGjM&index=3&list=PLZq1Zl_VCkkEO6LepoA13qBBPh9TrJUVS