fbpx

Introdução ao Laravel Framework – Parte 03

Introdução ao Laravel Framework – Parte 03

Saudações, devs! ✌😎

No post anterior aprendemos como instalar o Laravel framework e criar um projeto. Neste post, iremos aprender o básico da estrutura de pastas de um projeto Laravel e a arquitetura da aplicação. Bora! 🚀

Como você deve ter percebido, ao criar um projeto Laravel são baixadas diversas dependências, isto é, arquivos de configuração, bibliotecas JS, classes PHP, etc. Todos esses arquivos são armazenados em uma estrutura de pastas bem específica, como veremos a seguir.

1 – Pastas da raiz

/app: possui o core da aplicação. Todos os arquivos específicos do seu projeto ficam aqui; a subpasta Models ficam as models do Projeto;

/bootstrap: contém o arquivo app.php que inicializa a aplicação;

/config: possui arquivos para configurações diversas da aplicação;

/database: configurações do banco de dados, como migrations, model factories e seeds;

/public: possui o arquivo index.php, que é o ponto de entrada para a aplicação pelo cliente e também para a configuração do autoload (classes que serão carregadas). Nessa pasta também ficam ícones, imagens, e arquivos Javascript e CSS;

/resources: possui as views da aplicação, além de recursos não compilados, como Javascript, SASS e LESS;

/routes: contém os arquivos que definem as rotas da aplicação. Um rota normalmente define qual é o controlador que responderá uma requisição;

/storage: armazena os templates (views) compilados, arquivos de sessão, cache e outros arquivos gerados pelo Laravel;

/tests: contém os testes automatizados;

/vendor: possui as dependências do Laravel, gerenciadas pelo Composer;

2 – Arquivos da raiz

/.env: configurações de ambiente, tais como local, usuário e senha do banco de dados; nome da aplicação; emal; etc;

/composer.json: define as dependências do projeto;

/package.json: define dependências de arquivos JS;

/.gitignore: define arquivos e pastas que serão ignorados pelo git (controle de versão) se ele for usado no projeto;

Não é recomendável alterar os arquivos .lock, pois possuem as dependências do framework.

3 – Outros arquivos e pastas

/app/Http/Controllers: armazena os controladores da aplicação. A classe Controller estende a classe BaseController é será usada para a criação dos controllers da aplicação;

/app/Middleware: armazena os middlewares da aplicação. Um middleware é usado para filtrar as requisições e proteger controladores; O Laravel possui uma série de middlewares prontos e permite a criação de middlewares personalizados;

ATENÇÃO! Os arquivos e pastas apresentados até aqui fazem parte do que eu chamo de “essencial”. Para saber mais detalhes sobre a estrutura de pastas do projeto Laravel, consulte a documentação oficial.

4 – Arquitetura da aplicação Laravel

Uma aplicação Laravel é baseada no conhecido padrão arquitetural MVC – Model-View-Controller, que consiste em dividir uma aplicação em pelo menos três camadas com suas respectiva responsabilidades. Isso significa que o framework fornece tudo o que precisamos (classes e bibliotecas) para criar cada um dos elementos dessa arquitetura.

Arquitetura MVC clássica: 3 camadas mais o banco de dados.

Por exemplo, os Models usam o padrão Active Record para fazer o Mapeamento Objeto-Relacional (ORM – Object-Relation Mapping) entre a aplicação de o banco de dados. Os Controllers criados são herdeiros da classe BaseController, que fornece uma série de métodos para lidarmos com o controle da aplicação. Finalmente, para criar as Views, o Laravel fornece um poderoso motor de template chamado Blade.

Para fazer com que as camadas MVC se comuniquem de maneira adequada, a aplicação Laravel introduz uma série de outros componentes, dentre os quais se destacam o router (roteador) e os middlewares.

O router é o responsável por interceptar as requisições HTTP e direcioná-las ao Controller que irá fazer o tratamento. Por sua vez, um Middleware é usado para filtrar a requisição, ou seja, verificar se ela está de acordo com as políticas e regras de negócio da aplicação.

Portanto, além das já conhecidas camadas MVC, uma aplicação Laravel possui, no mínimo, mais duas camadas: router e middleware, como mostrado na figura a seguir:

Arquitetura de uma aplicação Laravel (resumo): MVC + router + middleware

A figura anterior é apenas uma abstração para que possamos compreender como os elementos da aplicação estão relacionados. Na verdade, o ciclo de vida completo de uma aplicação é apresentado no próximo tópico.

5 – Ciclo de vida

Segundo a documentação oficial do Laravel, o ciclo de vida da aplicação é definido da seguinte maneira:

  • O ponto de entrada da aplicação Laravel é o arquivo public/index.php – Todas as requisições são direcionadas a esse arquivo. Note que ele não possui muito código, pois é a penas o ponto de entrada;
  • O arquivo public/index.php carrega as classes necessárias à aplicação e obtém uma instância da aplicação Laravel por meio do arquivo bootstrap/app.php;
  • O próximo passo é enviar a requisição para o HTTP kernel ou console kernel, dependendo do tipo de requisição. As requisições mais típicas são do tipo HTTP, tratadas pela classe app/Http/Kernel.php;
  • A classe app/Http/Kernel.php configura tratamento de erros, logs, detecta o ambiente da aplicação e realiza outras tarefas de sessão. Normalmente não temos que nos preocupar, pois o framework gerencia todos esses aspectos da aplicação;
  • O HTTP kernel também define uma lista de middleware que farão a filtragem da requisição. Dois dos principais pontos aqui são o gerenciamento de sessão e a verificação do CSRF Token, garantindo a segurança da aplicação;
  • Agora é necessário carregar os Service Providers, definidos em config/app.php. Os Service Providers são os responsáveis por carregar uma série de serviços do framework, tais como: conexão com o banco de dados, gerenciamento de fila, validação e roteadores;
  • Um dos Services Providers mais importantes é o App\Providers\RouteServiceProvider, que carrega os arquivos de rotas que ficam na pasta ./routes.
  • Uma vez que a aplicação foi carregada e todos os seus serviços foram registrados, a requisição (Request) será enviada ao router para que ele direcione-a a um controlador, sendo filtrada por um middleware;
  • Finalmente, após o router ou o controller retornar uma resposta, a aplicação ainda poderá modificá-la antes dela retornar em definitivo para o cliente por meio de um objeto Response e o arquivo public/index.php.

ATENÇÃO! Para saber mais sobre o ciclo de vida, consulte a documentação oficial.

6 – Conclusão

Um projeto Laravel possui uma série de arquivos e pastas que são baixados automaticamente pelo Composer no ato da criação do projeto. Esses arquivos são o que chamamos de dependências, ou seja, o projeto depende desses arquivos para funcionar corretamente.

Claro, não é necessário conhecer detalhadamente todas as dependências do projeto, afinal de contas, o conceito de abstração na Programação Orientada a Objetos nos permite conhecer apenas o essencial de um framework para poder utilizá-lo.

Entretanto, é importante conhecer pelo menos os principais arquivos do framework, aqueles que definem a estrutura e a arquitetura da aplicação. Fazendo isso, aprenderemos a confiar ainda mais na ferramenta que estamos utilizando, além de adquirir proficiência. 😉

No próximo post iremos iniciar o desenvolvimento de uma aplicação CRUD (Create, Retrieve, Update and Delete) simples, em que exploraremos os principais elementos do Laravel.

Até breve! 😎👍

Jorge Luís Gregório

Jorge Luís Gregório

Professor e entusiasta de tecnologia, estudioso da cultura NERD e fã de quadrinhos, animes e games. Mais um pai de menino, casado com a mulher mais linda da galáxia e cristão convicto. Gosto de ler ficção científica e discutir tecnologia, filmes, seriados, teologia, filosofia e política. Quer falar sobre esses e diversos outros assuntos? Venha comigo!