Laravel Ciclo de Vida: o melhor ponto de partida para aprender Laravel

Laravel

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.

Laravel Ciclo de Vida: visão geral

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.

Laravel Ciclo de Vida - inicio

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.

Http/Console Kernels

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:

  • Tratamento de erros
  • Logging
  • Detecta o ambiente de aplicação (desenvolvimento, teste, produção, etc)
  • Realiza tarefas que serão executadas antes da requisição ser executada

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.

Services Providers

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.

Laravel ciclo de vida - 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.

Roteamento

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.

Laravel ciclo de vida - Roteamento

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.

Resposta

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.

Laravel ciclo de vida - Response

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!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

1 Comments

Amaury

Perfeito esse material, de suma importância para quem está iniciando.. É preciso entender isso... E irá fazer toda a diferença.