Desenvolvimento Desenvolvimento Web Laravel PHP

Estrutura de pastas do Framework PHP Laravel

creative dark internet designer
Photo by Markus Spiske on Pexels.com

O post Estrutura de pastas do Framework PHP Laravel fala sobre toda a estrutura de pastas e arquivos do Laravel. Contruimos um projeto utilizando a versão 5.5.* do Laravel para analizar a estrutura de pastas do mesmo.

Estrutura de pastas do Framework PHP Laravel

Arquivos Importantes:

Já na raiz do framework podemos notar alguns arquivos, agora vamos analisar os principais e suas funcionalidades.

.env:

Este arquivo ficam informações sensíveis, informações de senha e configuração do sistema. O propósito deste arquivo é manter os dados de senha armazenados de forma mais segura possível.

artisan:

É o grande amigo do(a) desenvolver(a) Laravel, este arquivo provê uma interface CLI (Command Line Interface) onde é possível rodar comandos e automatizar e simplificar diversas tarefas, como por exemplo criar Controllers, Models e mutio mais.

composer.json:

Para quem já trabalha com o composer está familiarizado com este arquivo, este arquivo mantém as informações dependências do projeto (pacotes de terceiros), possui informações sobre o carregamento de Classes e arquivos (autoload) e ainda contém algumas configurações para rodar alguns scripts. Saiba mais sobre o composer.

package.json:

Esse arquivo segue a mesma linha de raciocínio do arquivo composer.json, porém ele é para definir dependências de pacotes JS

webpack.mix.js:

Este arquivo é de configuração do webback, neste arquivo é possível definir as configuração para compactação e unificação de arquivos css e js, com Laravel MIX.

Estrutura de pastas do laravel:

O Laravel já traz consigo uma estrutura de pastas, agora vou detalhar cada uma e qual a funcionalidade dentro do clico de vida do Framework.

public/:

É o Document Root do Laravel, ou seja, é o ponto de partida. O arquivo index.php é o start do Laravel, é a partir deste arquivo que tudo inicia (O arquivo autoload.php é incluído neste ponto). É dentro deste diretório que os arquivos públicos devem ficar, como por exemplo arquivos de imagens, fonts, css e JS.

bootstrap/:

É onde fica os arquivo(s) de inicialização do framework, o arquivo app.php tem a configuração de bootstrap da aplicação, ou seja, é este arquivo que inicia os serviços que o Laravel precisa para começar a rodar. Neste diretório também outro chamado “cache” que contém os arquivos gerados para otimização de cache.

config/:

Como o próprio nome sugere é onde fica os arquivos de configuração do Framework. Os nomes dos arquivos de configuração são bastante sugestivos e cada um tem uma responsabilidade única e específica.

  • app.php Configuração da aplicação de forma geral, configurações nome da app, timezone, debug, url, internacionalização, log, providers e etc.
  • auth.php Configuração de autenticação (login)
  • broadcasting.php Configuração de Broadcast
  • cache.php Configuração do cache, como por exemplo tipo de armazenamento (local) e prefixo.
  • filesystems.php Configurações de upload de arquivos no Laravel (Local de armazenamento!). Veja este tutorial sobre upload de arquivos no Laravel [https://blog.especializati.com.br/upload-de-arquivos-no-laravel-com-request/].
  • mail.php Configurações do envio de e-mail, desde a escolha do driver (provedor) até informações de autenticação e porta.
  • queue.php Configurações de filas, o Laravel permite trabalhar com filas para organizar rotinas pesadas e gerar menor gargalo de consumo na aplicação, sendo assim faz a aplicação trabalhar de forma mais inteligente utilizando os recursos a medida que estiverem disponíveis.
  • services.php Configurações de acesso a serviços externos que o Laravel possíveis de trabalhar no Laravel, como por exemplo Stripe, Mailgun e etc.
  • session.php Configurações de sessões, desde a escolha do driver (como será armazenado), até tempo de expiração, criptografia da sessão e etc.
  • view.php Configuração de armazenamento das views (path), por default neste arquivo está configurado para resources/views/, se quiser um caminho diferente deste basta alterar neste arquivo. Os arquivos de view do Laravel são renderizados pelo Blade e por este motivo eles são compactados para serem exibidos de forma mais rápida, e é neste arquivo que define também o local onde ficará estes arquivos de view compilados, por default (padrão) fica em storage/framework/views/

vendor/:

É o diretório proibido e intocável pelo Homem. Este diretório e tudo o que há nele é gerado pelo composer (que é o gerenciador de dependências do PHP), tudo o que há neste diretório é gerenciado pelo composer e por esse motivo não é válido fazer nenhuma alteração manual. O que há neste diretório é arquivos configuração de autoload do composer e pacotes de terceiros utilizados em seu projeto.

routes/:

Como o próprio nome sugere é onde fica os arquivos de rotas do sistema. O sistema de rotas do Laravel é muito robusto.

  • web.php Fica as rotas da aplicação. Saiba mais sobre rotas
  • api.php São as rotas para API, ou seja, rotas para criar Webservice no Laravel, as rotas aqui passam por alguns middlewares com o “api” que limita o total de requisição por um terminado intervalo de tempo. As rotas aqui NÃO passa pelo middleware CSRF. E rotas neste arquivo tem o prefixo “api”.
  • channels.php é onde fica registrado todos os canais de transmissão de eventos de Broadcasting
  • console.php neste arquivo é onde define IO de comandos no Laravel

database/:

É neste diretório que fica os arquivos de definição de banco de dados, em alguns casos fica até mesmo o próprio banco de dados (quando estiver trabalhando com sqlite, por exemplo!).

  • factories/ Aqui é possível criar arquivos para fazer inserções dinâmicas com vários registros de uma única vez, ótimo para testar com registros no database, porque insere uma sequência definida de registros no banco de dados.
  • migrations/ É onde fica os arquivos com a definição das estruturas das tabelas.
  • seeds/ É onde fica os arquivos com algumas rotinas automáticas para banco de dados, como por exemplo inserir um registro assim que uma tabela for criada.

resources/:

Neste diretório fica alguns arquivos visuais da aplicação, como as próprias views, arquivos de internacionalização (tradução) e arquivos de assets não compilados como LESS, SASS e JavaScript

  • assets/ Arquivos não compilados de CSS e JS.
  • lang/ Arquivos de internacionalização (tradução)
  • views/ Seguindo a regra do MVC aqui é onde fica por padrão os arquivos de views

storage/:

Em resumo neste diretório contém conteúdos que são armazenados e utilizados durante o processamento da aplicação. É aqui que fica os arquivos compilados do template blade do laravel

  • app/ Utilizado para armazenar arquivos utilizados pela aplicação. em storage/app/public é possível armazenar arquivos que serão ser exibidos posteriormente em algum momento, como por exemplo arquivos de imagens. Para utilizar algum recurso basta rodar o comando “php artisan storage:link” isso vai criar um link simbólico em public/storage/ para este diretório storage/app/public (atalho)
  • framework/ armazena os arquivos gerados pelo framework, com por exemplo arquivos de cache.
  • logs/ é basicamente aqui que fica os arquivos de log da aplicação.

tests/:

É neste diretório que deve ficar os arquivos para testes automatizados. Saiba Mais!

app/:

Neste diretório é onde certamente irá ficar a maior parte do nosso código, ou seja, é neste diretório que fica a parte lógica da aplicação que você irá desenvolver. E é neste diretório que tem a maior estrutura de diretórios e subdiretórios.

Vale lembrar que o carregamento das classes neste diretório se dá pelo composer com a PSR-4

Nas versões mais atuais do Laravel >= 5.3 este diretório vem mais clean (limpo), mas a medida que a aplicação vai escalando e crescendo em funcionalidades este diretório é incrementado em novos diretórios. Por padrão tem os diretórios: Console, Exceptions, Http, e Providers.

  • Console/ O Laravel permite criar comandos para facilitar algumas tarefas durante o desenvolvimento, e todos os arquivos de comandos customizados ficam neste diretório.
  • Exceptions/ As exceções do Laravel podem ser tratadas neste diretório, inclusive tem a classe Handler que recebe todos as exceptions, é aqui que torna possível fazer o tratamento de exceções e alterar algum comportamento padrão.
  • Http/ As classes para tratamento das requisições Http ficam dentro deste diretório, neste diretório fica inclusive a outra camada do MVC que é o Controller
    • Controllers/ É onde fica as classes do MVC do Controller, ou seja, os controladores da aplicação ficam neste diretório.
    • Kernel.php Nessa classe fica as configurações (nomes) dos middlewares (filtros).
    • Middleware/ É onde fica os middlewares (filtros) personalizados. Saiba mais sobre middlewares neste link.
    • Requests/ classes com as validações (Este diretório não vem pode default (padrão) ele é criado quando roda o comando: php artisan make:request StoreUpdateUserFormRequest)
  • Providers/ Neste diretório fica alguns pontos mais avançados do framework
    • AppServiceProvider.php É possível definir algumas configuração padrão já no start da aplicação.
    • AuthServiceProvider.php É onde define algumas lógicas de ACL (Access Control Lists) (Níveis de Acesso). Se quiser se aprofundar mais sobre isso, veja neste link.
    • BroadcastServiceProvider.php É onde configura o Broadcasting da aplicação.
    • EventServiceProvider.php É onde define os Eventos e Listeners (ouvintes) dos Eventos.
    • RouteServiceProvider.php É onde é possível define algumas configurações padrões para as rotas (sistema de roteamento do Laravel), é possível definir por exemplo o namespace default (padrão) dos controllers.
  • User.php É a camada do MVC Model, por padrão todas os modelos (Models) ficam armazenados dentro de app/, particularmente não gosto destra estrutura padrão, prefiro criar um subdiretório dentro de app/ para armazenar as classes de forma mais organizada. Para criar as models mais organizadas pode rodar o comando assim: “php artisan make:model Models\\Product” este comando vai criar o Model Product em app/Models/Product.php

Super dicas

Quer aprender muito mais sobre programação? Então se inscreva no curso PHP básico.

Se inscreva em nosso canal e compartilhe as matérias que gostar com os seus colegas.

Participe dos nossos grupos de estudos do Facebook e Telegram.

Aproveite também e venha fazer parte do nosso clube de vantagens e ter acesso exclusivo a vídeos, tutoriais, cursos e muito mais.

Clique no link para se tornar um membro do dfilitto – clube de vantagens e ter acesso a todos os benefícios do nosso clube.

About the author

Danilo Filitto

Mestre em Ciência da Computação pela Universidade Estadual de Maringá - UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná - UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista - UNOESTE.

Atuo na área acadêmica como professor desde 2006. Atualmente leciono na UNOESTE (Universidade do Oeste Paulista), no SENAC (Serviço Nacional de Aprendizagem Comercial) e possuo vários cursos na Udemy (https://www.udemy.com/user/danilo-filitto/).

Além disso, sou o CEO dos sites https:www.dfilitto.com.br e https:www.makeindiegames.com.br

Você também pode me encontrar no YouTube por meio do endereço https://www.youtube.com/danilofilittoppr

Inscreva-se para receber em seus e-mais as notícias do nosso site

Quer aprender a programar?