Aperçu
Lorsque vous créez un projet Laravel, la gestion des erreurs et des exceptions est déjà configurée par défaut. La personnalisation se fait via la méthodewithExceptions dans bootstrap/app.php.
Flux de traitement des exceptions
Voici le cheminement d’une exception, de son déclenchement à la réponse renvoyée au client.$exceptions passé à la closure withExceptions est une instance de Illuminate\Foundation\Configuration\Exceptions qui pilote la gestion des exceptions dans toute l’application.
Configuration du mode debug
L’optiondebug de config/app.php contrôle le niveau de détail affiché pour les erreurs.
Par défaut, sa valeur provient de la variable d’environnement APP_DEBUG du fichier .env.
Signalement des exceptions
Signaler une exception, c’est l’enregistrer dans les logs ou l’envoyer à un service externe comme Laravel Nightwatch, Sentry ou Flare. Par défaut, Laravel enregistre les exceptions en s’appuyant sur la configuration deconfig/logging.php.
Callbacks de reporting personnalisés
Pour signaler certains types d’exceptions différemment, passez une closure à la méthodereport.
Laravel déduit le type d’exception depuis le type-hint de la closure.
stop() ou renvoyez false.
Le helper report()
Pour signaler une exception sans interrompre la réponse, utilisez le helper report().
Éviter les doublons de reporting
Si la même instance d’exception est passée plusieurs fois àreport(), plusieurs entrées peuvent apparaître dans les logs.
Configurez dontReportDuplicates() pour qu’une même instance ne soit journalisée que la première fois.
Contexte global de log
Pour ajouter des informations communes à tous les logs d’exception, utilisez la méthodecontext.
L’identifiant de l’utilisateur courant est automatiquement joint lorsqu’il est disponible.
Ajouter context() à une classe d’exception
En définissant une méthode context() sur une classe d’exception, vous joignez à ses logs des informations qui lui sont propres.
Modifier le niveau de log
Pour journaliser une exception donnée à un niveau spécifique, utilisezlevel.
Throttling du reporting
Si un très grand nombre d’exceptions se produit, la méthodethrottle permet de limiter le volume de reporting.
Limit.
Rendu des exceptions
Le rendu transforme une exception en réponse HTTP. Par défaut, Laravel produit une réponse appropriée ; vous pouvez néanmoins la personnaliser.Callback de rendu personnalisé
Passez une closure àrender pour convertir une exception en réponse.
NotFoundHttpException).
Si la closure ne retourne rien, le rendu par défaut est utilisé.
Détection automatique JSON / HTML
Laravel décide automatiquement de renvoyer du HTML ou du JSON en s’appuyant sur l’en-têteAccept de la requête.
Pour personnaliser cette logique, utilisez shouldRenderJsonWhen.
Personnaliser la réponse finale
respond permet d’agir sur la réponse déjà générée.
Classes d’exception personnalisées
Vous pouvez créer vos propres classes d’exception dansapp/Exceptions/.
En définissant les méthodes report() et render(), elles sont automatiquement appelées, sans configuration supplémentaire dans bootstrap/app.php.
Créer une classe d’exception
1
Générer la classe
2
Implémenter report() et render()
Vous pouvez utiliser l’injection de dépendances via un type-hint dans
report() : le service container de Laravel la résoudra automatiquement.L’interface ShouldntReport
Pour les exceptions qui ne doivent pas être signalées, implémentez l’interface ShouldntReport.
Une exception implémentant cette interface n’est jamais reportée.
Lever des exceptions
Le helper abort()
Vous pouvez générer une réponse d’erreur HTTP depuis n’importe où dans l’application.
abort_if() / abort_unless()
Ce sont des helpers conditionnels pour lever une exception.
Contrôle global des exceptions
Ignorer certaines exceptions
UtilisezdontReport pour indiquer les exceptions à ne pas signaler. La logique de rendu personnalisée reste, elle, active.
dontReportWhen.
Par défaut, Laravel ignore automatiquement certaines exceptions comme les erreurs 404, les erreurs de CSRF (419) ou les incohérences d’origine (403).
Réactiver le reporting d’exceptions ignorées
Pour rétablir le reporting d’exceptions ignorées par défaut, utilisezstopIgnoring.
Pages d’erreur HTTP
Laravel permet de définir une vue d’erreur personnalisée par code de statut HTTP.Créer des vues d’erreur personnalisées
Créez, dans le répertoireresources/views/errors/, un template Blade dont le nom de fichier correspond au code de statut.
$exception donne accès aux informations d’erreur.
Publier les templates d’erreur par défaut
Pour partir des pages d’erreur standard de Laravel, publiez-les viavendor:publish.
Pages d’erreur de secours
Comme fallback pour les codes de statut qui n’ont pas de vue dédiée, créez4xx.blade.php et 5xx.blade.php.
Exemple concret : handler d’exceptions pour API
Une application qui expose une API doit systématiquement renvoyer du JSON. Voici un exemple de centralisation des erreurs API dansbootstrap/app.php.
Implémenter une classe d’exception API dédiée
Une classe d’exception de base dédiée à l’API permet de garantir une réponse d’erreur homogène pour tous les endpoints.Récapitulatif
Récapitulatif du reporting
Récapitulatif du reporting
Récapitulatif du rendu
Récapitulatif du rendu
Récapitulatif des pages d'erreur HTTP
Récapitulatif des pages d'erreur HTTP
- Créer un fichier comme
resources/views/errors/404.blade.phpsuffit à l’activer. - La variable
$exceptiondonne accès au détail de l’erreur. php artisan vendor:publish --tag=laravel-errorspermet de récupérer les templates par défaut.4xx.blade.php/5xx.blade.phpdéfinissent des pages de secours.
Bonnes pratiques en production
Bonnes pratiques en production
- Toujours fixer
APP_DEBUG=falsepour ne pas exposer la stack trace aux utilisateurs. - Intégrer un service de suivi d’erreurs comme Sentry ou Flare pour centraliser les incidents.
- Utiliser
throttle()pour éviter la saturation des logs en cas de pic d’exceptions. - Sur une API, conserver un format JSON d’erreur cohérent pour tous les endpoints.