Skip to main content

Panoramica

Quando crei un progetto Laravel, la gestione di errori ed eccezioni è già preconfigurata. Personalizzi con il metodo withExceptions in bootstrap/app.php.

Flusso di gestione delle eccezioni

Dal momento in cui viene sollevata un’eccezione fino alla risposta al client.
L’oggetto $exceptions è un’istanza di Illuminate\Foundation\Configuration\Exceptions che gestisce l’handler dell’applicazione.

Debug

L’opzione debug di config/app.php controlla quanto viene mostrato. Di default segue APP_DEBUG in .env.
In produzione imposta sempre APP_DEBUG a false. Lasciarlo su true espone dati sensibili agli utenti finali.

Reporting delle eccezioni

Il reporting è la registrazione delle eccezioni in log o su servizi esterni come Sentry o Flare. Di default vanno nel log secondo config/logging.php.

Callback di report personalizzate

Per gestire in modo diverso i vari tipi di eccezione, passa una closure a report. Laravel deduce il tipo dal type hint.
Anche con callback personalizzate, il log di default continua. Per fermare la propagazione chiama stop() o restituisci false.

Helper report()

Per segnalare un’eccezione senza mostrare una pagina d’errore, usa report().
report() registra l’errore senza interrompere la risposta all’utente. Utile per background job e operazioni non critiche.

Prevenire duplicati

Se la stessa istanza viene passata più volte a report() compaiono log duplicati. Con dontReportDuplicates() viene registrata solo la prima volta.

Contesto globale del log

Per aggiungere informazioni comuni a tutti i log di eccezioni usa context. L’ID utente corrente viene aggiunto automaticamente se disponibile.

Metodo context() sulla classe eccezione

Definendo context() sulla classe eccezione includi informazioni specifiche di quella eccezione.

Livello di log

Per registrare certe eccezioni a un livello specifico usa level.

Throttling delle segnalazioni

In caso di molte eccezioni puoi limitare le segnalazioni con throttle.
Per limite al minuto usa Limit.

Rendering delle eccezioni

Il rendering trasforma l’eccezione in una risposta HTTP. Laravel lo fa in automatico, ma puoi personalizzare.

Callback di rendering personalizzate

Con una closure passata a render trasformi l’eccezione in risposta.
Puoi sovrascrivere anche il rendering di eccezioni integrate (come NotFoundHttpException). Se la closure non ritorna nulla, viene usato il rendering di default.

JSON o HTML in automatico

Laravel decide in base all’header Accept. Per personalizzare la logica usa shouldRenderJsonWhen.

Manipolare la risposta finale

Con respond modifichi la risposta generata.

Classi eccezione personalizzate

Puoi creare eccezioni personalizzate in app/Exceptions/. Se definisci report() e render() vengono chiamati automaticamente senza dover configurare bootstrap/app.php.

Creare la classe eccezione

1

Crea la classe

2

Implementa report() e render()

In report() puoi usare la dependency injection tramite type hint. Il service container risolve automaticamente.

Interfaccia ShouldntReport

Per eccezioni che non vanno mai segnalate implementa ShouldntReport.

Lanciare eccezioni

Helper abort()

Ovunque nell’applicazione puoi generare una risposta di errore HTTP.

abort_if() / abort_unless()

Helper per lanciare eccezioni condizionali.
Comodi per i controlli di permesso in controller e middleware, spesso combinati con gate e policy.

Controllo globale delle eccezioni

Ignorare eccezioni

Escludi eccezioni dal reporting con dontReport. La logica di rendering personalizzata continua a funzionare.
Condizionalmente con dontReportWhen.
Laravel ignora già di default alcune eccezioni (404, CSRF 419, mismatch origin 403, ecc.).

Riportare eccezioni ignorate

Con stopIgnoring riporti eccezioni ignorate.

Pagine di errore HTTP

Puoi definire viste personalizzate per ogni codice HTTP.

Creare viste di errore

Crea in resources/views/errors/ template Blade con il codice HTTP come nome.
Nella vista usa $exception.

Pubblicare i template di default

Per personalizzarli usa vendor:publish.

Pagine di fallback

Crea 4xx.blade.php e 5xx.blade.php per fare da fallback.
Per 404, 500, 503 Laravel ha pagine di default. Per personalizzarli crea i file specifici, non il fallback.

Esempio pratico: handler API

Nelle applicazioni API le eccezioni vanno restituite sempre in JSON. Esempio in bootstrap/app.php.

Eccezione API personalizzata

Uso nel controller:
  • Crea resources/views/errors/404.blade.php ecc. per attivarle
  • Usa $exception per i dettagli
  • vendor:publish --tag=laravel-errors per i template di default
  • 4xx.blade.php / 5xx.blade.php come fallback
  • APP_DEBUG=false sempre, per non esporre lo stack trace
  • Integra Sentry, Flare o strumenti simili
  • throttle() per non intasare i log
  • Mantieni un formato JSON coerente per gli errori delle API
Ultima modifica il 13 luglio 2026