source_url | revision | status |
---|---|---|
51c2103e2594f1655666b965fbfd5893a0cbec1b |
ready |
Ao usar qualquer ferramenta no mundo real, você se sente mais confiante se entender como essa ferramenta funciona. O desenvolvimento de aplicações não é diferente. Quando você entende como suas ferramentas de desenvolvimento funcionam, você se sente mais confortável e confiante ao usá-las.
O objetivo deste documento é fornecer uma visão geral de alto nível de como o framework Laravel funciona. Ao conhecer melhor o framework de forma geral, tudo parecerá menos mágico e você terá mais confiança na construção das suas aplicações. Se você não entender todos os termos imediatamente, não desanime! Apenas tente entender o básico do que está acontecendo e seu conhecimento aumentará à medida que você explorar outras seções da documentação.
O ponto de entrada para todas as requisições para uma aplicação Laravel é o
arquivo public/index.php
.
Todas as requisições são direcionadas para este arquivo pela configuração do seu
servidor web (Apache/Nginx).
O arquivo index.php
não contém muito código.
Em vez disso, é um ponto de partida para carregar o restante do framework.
O arquivo index.php
carrega a definição do carregador automático gerada pelo
Composer e, em seguida, recupera uma instância da aplicação Laravel de
bootstrap/app.php
.
A primeira ação realizada pelo próprio Laravel é criar uma instância da
aplicação/contêiner de serviço.
Em seguida, a requisição recebida é enviada para o kernel HTTP ou para o
kernel do console, usando os métodos handleRequest
ou handleCommand
da
instância da aplicação, dependendo do tipo de requisição que entrou na
aplicação.
Esses dois kernels servem como local central através do qual fluem todas as
requisições.
Por enquanto, vamos nos concentrar apenas no kernel HTTP, que é uma instância
de Illuminate\Foundation\Http\Kernel
.
O kernel HTTP define um array de bootstrappers
que serão executados antes
da execução da requisição.
Esses bootstrappers configuram o tratamento de erros, configuram o log,
detectam o ambiente da aplicação,
e executam outras tarefas que precisam ser executadas antes que a requisição
seja realmente tratada.
Normalmente, essas classes lidam com configurações internas do Laravel com as
quais você não precisa se preocupar.
O kernel HTTP também é responsável por passar a requisição pela pilha de middlewares da aplicação. Esses middlewares lidam com a leitura e gravação da sessão HTTP, determinando se a aplicação está em modo de manutenção, verificando o token CSRF e muito mais. Falaremos mais sobre isso em breve.
A assinatura do método handle
do kernel HTTP é bem simples: ele recebe uma
requisição e retorna uma resposta.
Pense no kernel como uma grande caixa preta que representa toda a aplicação.
Alimente-o com requisições HTTP e ele retornará respostas HTTP.
Uma das ações mais importantes de inicialização do kernel é carregar os provedores de serviço da sua aplicação. Os provedores de serviço são responsáveis pela inicialização de todos os vários componentes do framework, como componentes de banco de dados, fila, validação e de roteamento.
O Laravel irá percorrer esta lista de provedores e instanciar cada um deles.
Após instanciar os provedores, o método register
será chamado em todos os
provedores.
Então, uma vez registrados todos os provedores, o método boot
será chamado em
cada provedor.
Isso é necessário para que os provedores de serviço possam depender de cada
ligação de contêiner registrada e disponibilizada no momento em que o método
boot
for executado.
Essencialmente, todos os principais recursos oferecidos pelo Laravel são inicializados e configurados por um provedor de serviço. Como eles inicializam e configuram tantos recursos oferecidos pelo framework, os provedores de serviço são o aspecto mais importante de todo o processo de inicialização do Laravel.
Embora o framework use internamente dezenas de provedores de serviço, você
também tem a opção de criar o seu próprio.
Você pode encontrar uma lista dos provedores de serviço definidos pela pessoa
desenvolvedora ou de terceiros que sua aplicação está usando no arquivo
bootstrap/providers.php
.
Depois que a aplicação tiver sido inicializada e todos os provedores de serviço
registrados, a Request
será entregue ao roteador para despacho.
O roteador despachará a requisição para uma rota ou controlador, e também
executará qualquer middleware específico da rota.
Os middlewares fornecem um mecanismo conveniente para filtrar ou examinar
requisições HTTP que entram na sua aplicação.
Por exemplo, o Laravel inclui um middleware que verifica se a pessoa usuária
da sua aplicação está autenticada.
Caso a pessoa usuária não esteja autenticada, o middleware irá redirecioná-la
para a tela de login.
Entretanto, se a pessoa usuária estiver autenticada, o middleware permitirá
que a requisição siga adiante na aplicação.
Alguns middlewares são atribuídos a todas as rotas da aplicação, como
PreventRequestsDuringMaintenance
, enquanto outros são atribuídos apenas a
rotas ou grupos de rotas específicos.
Você pode aprender mais sobre middlewares lendo a
documentação completa de middlewares.
Se a requisição passar por todos os middlewares atribuídos à rota correspondente, a rota ou método controlador será executado e a resposta retornada pela rota ou método controlador será enviada de volta através da cadeia de middlewares da rota.
Depois que a rota ou o método controlador retornar uma resposta, a resposta retornará através dos middlewares da rota, dando à aplicação a chance de modificar ou examinar a resposta de saída.
Finalmente, uma vez que a resposta retorne através dos middlewares, o método
handle
do kernel HTTP retorna o objeto de resposta para o handleRequest
da
instância da aplicação, e esse método chama o método send
na resposta
retornada.
O método send
envia o conteúdo da resposta ao navegador da pessoa usuária.
Agora completamos nossa jornada por todo o ciclo de vida da requisição do
Laravel!
Os provedores de serviço são realmente a chave para inicializar uma aplicação Laravel. A instância da aplicação é criada, os provedores de serviço são registrados e a requisição é entregue à aplicação inicializada. É realmente simples assim!
Ter um bom entendimento de como uma aplicação Laravel é construída e
inicializada por meio dos provedores de serviço é muito valioso.
Os provedores de serviço definidos pela pessoa desenvolvedora da sua aplicação
são armazenados no diretório app/Providers
.
Por padrão, o AppServiceProvider
está bem vazio.
Esse provedor é um ótimo lugar para adicionar a inicialização e as ligações de
contêiner de serviço da sua aplicação.
Para aplicações grandes, você pode criar vários provedores de serviço, cada um
com uma inicialização mais granular para os serviços específicos usados pela sua
aplicação.