Vue d’ensemble
Dans un projet Laravel, la gestion des erreurs et exceptions est préconfigurée. La personnalisation se fait viawithExceptions dans bootstrap/app.php.
Flux de traitement d’une exception
De l’apparition d’une exception jusqu’à la réponse envoyée au client :$exceptions passé à la closure est une instance de Illuminate\Foundation\Configuration\Exceptions qui pilote la gestion des exceptions.
Debug
L’optiondebug de config/app.php contrôle le niveau d’information affiché. Par défaut, elle suit APP_DEBUG.
Rapport d’exceptions
Rapporter, c’est journaliser une exception ou l’envoyer à Sentry, Flare, etc. Par défaut, elles sont journalisées selonconfig/logging.php.
Callback de rapport personnalisé
Pour un traitement spécifique selon le type d’exception, passez une closure àreport. Laravel utilise le type-hint pour identifier l’exception.
stop() ou retournez false.
Helper report()
Pour rapporter sans afficher de page d’erreur :
Éviter les doublons
Une même instance rapportée plusieurs fois génère des doublons.dontReportDuplicates() limite au premier appel.
Contexte global de log
Ajoutez des informations communes à tous les logs d’exception aveccontext.
L’ID de l’utilisateur courant est ajouté automatiquement s’il est disponible.
Méthode context() sur la classe d’exception
Ajoutez du contexte spécifique à une exception.
Niveau de log
Fixez un niveau pour un type d’exception aveclevel.
Limitation (throttle)
Pour un grand volume d’exceptions, limitez avecthrottle.
Rendu d’exceptions
Le rendu convertit une exception en réponse HTTP. Laravel produit une réponse appropriée par défaut, mais vous pouvez la personnaliser.Callback de rendu personnalisé
NotFoundHttpException…).
Si la closure ne retourne rien, le rendu par défaut est utilisé.
JSON / HTML automatique
Laravel décide selon l’en-têteAccept. Pour personnaliser cette logique, utilisez shouldRenderJsonWhen.
Personnaliser la réponse finale
respond transforme la réponse finale.
Classes d’exception personnalisées
Créez vos exceptions dansapp/Exceptions/.
Les méthodes report() et render() définies dans la classe sont appelées automatiquement, sans configuration dans bootstrap/app.php.
Créer une exception
1
Générer la classe
2
Implémenter `report()` et `render()`
report() accepte les type-hints pour injection. Le conteneur les résout automatiquement.Interface ShouldntReport
Pour les exceptions à ne jamais rapporter, implémentez ShouldntReport.
Lever une exception
Helper abort()
Générez une réponse HTTP d’erreur depuis n’importe où.
abort_if() / abort_unless()
Contrôle global
Ignorer un type d’exception
dontReport ignore certaines exceptions au rapport. La logique de rendu reste active.
dontReportWhen :
Laravel ignore par défaut certaines exceptions comme les erreurs 404, l’échec CSRF (419) ou l’incohérence d’origine (403).
Réactiver une exception ignorée par défaut
UtilisezstopIgnoring.
Pages d’erreur HTTP
Définissez une vue personnalisée par code HTTP.Créer une vue d’erreur personnalisée
Placez un template Blade nommé par code dansresources/views/errors/.
$exception est disponible.
Publier les vues par défaut
Pour partir des vues fournies par Laravel :Vue de repli
Créez4xx.blade.php et 5xx.blade.php comme repli.
Exemple : handler d’exceptions API
Pour une application API, retournez systématiquement du JSON.Classe d’exception API personnalisée
Une classe de base unifie les réponses.Récapitulatif
Rapport d'exceptions
Rapport d'exceptions
Rendu d'exceptions
Rendu d'exceptions
Pages d'erreur HTTP
Pages d'erreur HTTP
- Créer
resources/views/errors/404.blade.phpetc. suffit $exceptiondonne accès aux détailsphp artisan vendor:publish --tag=laravel-errorspublie les templates par défaut4xx.blade.php/5xx.blade.phppour un repli
Bonnes pratiques en production
Bonnes pratiques en production
APP_DEBUG=falseobligatoire pour ne pas exposer les stack traces- Intégrer Sentry, Flare ou équivalent pour un suivi centralisé
- Utiliser
throttle()pour éviter de saturer les logs - Maintenir un format JSON d’erreur cohérent pour les API