Skip to main content

Vue d’ensemble

Dans un projet Laravel, la gestion des erreurs et exceptions est préconfigurée. La personnalisation se fait via withExceptions dans bootstrap/app.php.

Flux de traitement d’une exception

De l’apparition d’une exception jusqu’à la réponse envoyée au client :
L’objet $exceptions passé à la closure est une instance de Illuminate\Foundation\Configuration\Exceptions qui pilote la gestion des exceptions.

Debug

L’option debug de config/app.php contrôle le niveau d’information affiché. Par défaut, elle suit APP_DEBUG.
En production, APP_DEBUG doit être false. Sinon, des informations sensibles peuvent être exposées.

Rapport d’exceptions

Rapporter, c’est journaliser une exception ou l’envoyer à Sentry, Flare, etc. Par défaut, elles sont journalisées selon config/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.
Le rapport par défaut continue. Pour l’arrêter, appelez stop() ou retournez false.

Helper report()

Pour rapporter sans afficher de page d’erreur :
report() journalise sans interrompre la réponse à l’utilisateur. Utile dans les jobs en arrière-plan et pour des exceptions non critiques.

É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 avec context. 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 avec level.

Limitation (throttle)

Pour un grand volume d’exceptions, limitez avec throttle.
Limitation par minute :

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é

Vous pouvez surcharger le rendu des exceptions intégrées (NotFoundHttpException…). Si la closure ne retourne rien, le rendu par défaut est utilisé.

JSON / HTML automatique

Laravel décide selon l’en-tête Accept. 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 dans app/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()

Utile pour les contrôles de droits dans les contrôleurs et middlewares. Souvent combiné avec Gates et Policies.

Contrôle global

Ignorer un type d’exception

dontReport ignore certaines exceptions au rapport. La logique de rendu reste active.
Sous condition avec 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

Utilisez stopIgnoring.

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 dans resources/views/errors/.
La variable $exception est disponible.

Publier les vues par défaut

Pour partir des vues fournies par Laravel :

Vue de repli

Créez 4xx.blade.php et 5xx.blade.php comme repli.
Laravel fournit des pages par défaut pour 404, 500, 503. Pour les personnaliser, créez des fichiers individuels (404.blade.php…) plutôt que le fallback.

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.
Exemple dans un contrôleur :

Récapitulatif

  • Créer resources/views/errors/404.blade.php etc. suffit
  • $exception donne accès aux détails
  • php artisan vendor:publish --tag=laravel-errors publie les templates par défaut
  • 4xx.blade.php / 5xx.blade.php pour un repli
  • APP_DEBUG=false obligatoire 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
Dernière modification le 13 juillet 2026