Laravel, como você deve estar ciente, é uma ferramenta poderosa, e o ciclo de vida das requisições é o melhor lugar para começar quando se quer aprender mais sobre o framework. Descreverei o processo que ocorre entre uma requisição HTTP à sua aplicação e a resposta. Um olhada mais a fundo sobre do ciclo de vida ajudará nossa compreensão do framework.
Autoloader, kernel, Service Providers, Dispatch Request, e Router são apenas alguns dos termos usados durante o ciclo de vida de uma requisição. Uma vez que você tenha uma compreensão completa de todos os termos, você estará mais confiante e à vontade com Laravel.
O arquivo public/index.php
serve como ponto de entrada para todas as requisições dentro do framework. Este arquivo também serve como ponto de partida para o restante do framework ser carregado.
O arquivo carrega a definição do autoloader gerado pelo composer antes de recuperar/carregar a instância da aplicação Laravel dentro do arquivo bootstrap/app.php
.
A primeira ação executada pelo framework em si, é a criação de uma instância do application/ServiceContainer
.
Durante o ciclo de vida, a requisição recebida é enviada ao Kernel Http
ou ao Kernel Console
, dependendo do tipo de requisição.
O Kernel Http
estende a classe Illuminate\Foundation\Http\Kernel
, que define um conjunto de bootstrappers que serão executados antes que a requisição seja tratada.
Estes bootstrappers configuram para você, de imediato:
O Kernel HTTP
(app/HttpKernel.php
) também define uma lista de middlewares HTTP através da qual todas as requisições devem passar antes de serem tratadas pela aplicação.
Estes middlewares tratam da leitura e escrita da sessão HTTP, identifica se o aplicativo está em modo de manutenção valida o token CSRF, dentre outras tarefas.
A assinatura do método handle()
dentro do Kernel HTTP
é bastante simples: ele recebe uma Requisição e retorna uma Resposta.
/**
* Trata a requisição recebida pela aplicação
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function handle($request)
{
// Também executa outras tarefas
return $response;
}
Considere o
Kernel
como uma grande caixa preta que contém toda a sua aplicação. Ele retorna respostas HTTP se você alimentá-lo com requisições HTTP.
Uma das mais importantes ações de bootstrapping que o Kernel HTTP
realiza durante o ciclo de vida da requisição, é carregar os Service Providers.
Todos os Service Providers para a aplicação são configurados dentro do arquivo config\app.php
em um array chamado providers.
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
...
App\Providers\RouteServiceProvider::class,
],
Laravel itera através do array de providers e instancia cada um deles. Após instanciar os providers, o método register()
será chamado a todos os providers. Então, uma vez que todos os providers tenham sido registrados, o método boot()
será chamado para carregar cada provider.
Os Service Providers tem seu próprio ciclo de vida, que é algo parecido com isto:
Instancia providers -> registra providers -> carrega providers
Os Service Providers são responsáveis por carregar todos os elementos chave da aplicação, como:
Fundamentalmente, todas as principais características oferecidas por Laravel são inicializadas e configuradas por um Service Provider.
Os Providers são o elemento mais importante do processo de bootstrap durante o ciclo de vida de uma requisição dentro de uma aplicação Laravel, simplesmente porque eles inicializam e configuram inúmeras características importantes fornecidas pelo framework.
Um dos mais importantes Service Providers carregados em sua aplicação é o App\Providers\RouteServiceProvider
. Este Service Provider carrega o(s) arquivo(s) de rota(s) contidos no diretório de \routes
de sua aplicação.
Uma vez que a aplicação tenha sido iniciada e todos os Service Providers tenham sido registrados e carregados, a requisição HTTP será despachada para um dos arquivos de rotas. O router
então, por sua vez, enviará a requisição para uma rota ou controlador. Em ambas opções um ou vários middlewares podem ser chamados.
// Encaminha requisição para uma rota que retorna uma view
Route::get('/', function () {
return view('welcome');
});
// Encaminha requisição para um Controller
Route::get('profile', [UserController::class, 'show'])->middleware('auth');
Middlewares fornecem um mecanismo conveniente para filtrar ou examinar as requisições HTTP que entram em sua aplicação.
Se a requisição passar por todos os middlewares designados para a rota, a rota ou o método do controller será executado e a resposta será enviada de volta através da cadeia de middlewares.
A nossa ultima peça do quebra cabeça. Todas as rotas e controllers devem fornecer uma resposta, que deve ser enviada de volta para o navegador do usuário. Laravel fornece várias maneiras diferentes de retornar respostas.
Quando uma rota ou método do controller retorna uma resposta, a resposta irá fluir de volta para fora através do middleware da rota, dando à aplicação a oportunidade de alterar ou examinar a resposta de saída.
Geralmente, a sua resposta não será uma simples string ou array. Em vez disso, em grande parte do tempo, você estará retornando uma instancia da classe Illuminate\Http\Response
.
Uma instância da classe Response
deriva da classe Symfony\Component\HttpFoundation\Response
, que fornece uma série de métodos para a construção de respostas HTTP.
Algumas das vantagens de retornar uma instância completa da classe Response
, é que você pode alterar o código de status HTTP e os cabeçalhos da resposta.
Finalmente, uma vez que a resposta tenha passado por todos os middlewares, o método handle()
do kernel HTTP
fornece o objeto de resposta, e o arquivo index.php
usa a resposta retornada para chamar o método send()
. O método send()
por sua vez envia o conteúdo da resposta para o navegador do usuário.
E assim concluímos nossa jornada através do ciclo de vida das requisições em Laravel!
Perfeito esse material, de suma importância para quem está iniciando.. É preciso entender isso... E irá fazer toda a diferença.
Deixe um comentário