Tratamento de Erros no Laravel

Laravel
Tempo de leitura: 4 minutos

Tratamento de Erros no Laravel: Erros e exceções são uma realidade no desenvolvimento de software. No Laravel 12, o tratamento de erros é centralizado e altamente configurável, permitindo que você gerencie falhas de forma elegante, logue problemas críticos e apresente mensagens amigáveis ao usuário final.

O coração deste sistema é o Handler de exceções, que age como um interceptador global para todas as falhas não capturadas.

1. 🤍 O Handler de Exceções Global

Todas as exceções não capturadas em Controllers, Routes ou Middlewares são direcionadas à classe App\Exceptions\Handler. Esta classe contém dois métodos principais para gerenciar o ciclo de vida de uma exceção:

A. Método report()

Este método é usado para enviar a exceção a serviços de monitoramento externos (como Sentry ou Bugsnag) ou logar a exceção.

  • Uso: É onde você define quais exceções devem ser ignoradas (não reportadas) usando a propriedade $dontReport.
  • Exemplo Padrão: O Laravel já ignora exceções comuns, como NotFoundHttpException e AuthorizationException, a menos que você as remova de $dontReport.

B. Método render()

Este método é responsável por formatar a exceção em uma resposta HTTP (Response) que será enviada de volta ao navegador do usuário.

  • Uso: É aqui que você pode personalizar a resposta, decidindo se deve retornar uma view HTML, um JSON de erro (para APIs) ou um redirecionamento.

PHP

// Trecho conceitual do Handler.php

public function render($request, \Throwable $exception)
{
    // Exemplo: Retornar JSON para todas as requisições de API
    if ($request->expectsJson() || $request->is('api/*')) {
        return response()->json([
            'message' => $exception->getMessage(),
            'code' => $exception->getCode(),
        ], 500); // Status HTTP 500
    }

    // Caso contrário, usa o tratamento padrão (página de erro)
    return parent::render($request, $exception);
}

2. 📝 Tratando Exceções Específicas ($renderables)

Para algumas exceções comuns, como falha de autenticação ou validação, você pode querer um tratamento específico sem poluir o método render(). O Laravel permite o uso de closures ou um array $renderables para mapear exceções a um tratamento.

Exceções Comuns

ExceçãoQuando OcorreTratamento Típico
AuthenticationExceptionFalha ao logar ou acesso sem autenticação.Redirecionar para a página de login.
AuthorizationExceptionUsuário logado tenta acessar recurso proibido.Retornar erro 403 Forbidden.
ModelNotFoundExceptionBusca por Model::findOrFail($id) falha.Retornar erro 404 Not Found.
ValidationExceptionFalha na validação de um Form Request.Retorna o usuário com os erros (tratado pelo Middleware).

3. 🖥️ Páginas de Erro Personalizadas

O Laravel 12 facilita a criação de páginas de erro bonitas e consistentes.

Estrutura e Nomenclatura

Para customizar a página de erro para um código de status HTTP específico, crie um arquivo Blade no diretório resources/views/errors/ com o nome do status.

Status HTTPNome do Arquivo Blade
404 (Não Encontrado)resources/views/errors/404.blade.php
403 (Proibido)resources/views/errors/403.blade.php
500 (Erro de Servidor)resources/views/errors/500.blade.php
419 (Sessão Expirada/CSRF)resources/views/errors/419.blade.php

Qualquer exceção que resulte em um desses códigos de status HTTP usará o seu template personalizado.

4. 🗃️ Logging e Exceções Customizadas

A. Logging (Monolog)

O Laravel utiliza o Monolog para gerenciar logs. Por padrão, ele registra as exceções (via report()) no arquivo storage/logs/laravel.log. Você configura os canais de log em config/logging.php.

B. Exceções Próprias

É uma boa prática criar suas próprias exceções para representar erros de negócio específicos.

  1. Criação via Artisan:
    Bash
    php artisan make:exception InvalidDataException
  2. Uso em Controllers:

PHP

use App\Exceptions\InvalidDataException; 

public function processData($data) { 
    if (/* ... condição de falha ... */) { 
        // Lança a exceção de forma explícita 
        throw new InvalidDataException('Dados fornecidos não atendem aos requisitos de negócio.'); 
    } 
    // ... 
}

C. Capturando no Código

Para código que pode falhar de forma controlada, use blocos try...catch. Isso impede que a exceção seja propagada para o Handler global e permite que você retorne uma resposta mais amigável.

PHP

try {
    $result = $this->someService->doDangerousTask();
} catch (\DatabaseException $e) {
    // Trata erro de banco de dados e retorna JSON
    return response()->json(['message' => 'Erro interno ao processar requisição.'], 500);
}

✅ Conclusão Tratamento de Erros no Laravel

Tratamento de Erros no Laravel: Um mecanismo eficiente de tratamento de erros é vital para a estabilidade e experiência do usuário. O Laravel centraliza todo o gerenciamento de exceções na classe Handler e facilita a criação de páginas de erro personalizadas (via resources/views/errors). Ao combinar o Handler com exceções customizadas e o uso estratégico de try...catch, você pode criar uma aplicação resiliente e fácil de monitorar.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.