écrits/tutorial/2024/06
Tutorial15 juin 2024·10 min

11 Les Bases de Laravel 11 : Gestion des Erreurs

Apprenez les essentiels de la gestion des erreurs dans Laravel 11, incluant la configuration du gestionnaire d'exceptions, le reporting et le rendu.

Lorsque vous demarrez un nouveau projet Laravel, la gestion des erreurs et des exceptions est deja configuree pour vous. La classe App\Exceptions\Handler est l'endroit ou toutes les exceptions lancees par votre application sont enregistrees puis rendues a l'utilisateur.

Configuration

L'option debug dans votre fichier de configuration config/app.php determine la quantite d'informations sur une erreur qui est affichee a l'utilisateur. Par defaut, cette option est configuree pour respecter la valeur de la variable d'environnement APP_DEBUG:

APP_DEBUG=true  # Pour le developpement
APP_DEBUG=false # Pour la production

Reporter les Exceptions

Le reporting d'exceptions est utilise pour logger les exceptions ou les envoyer a un service externe comme Sentry ou Flare. Par defaut, les exceptions sont loggees selon votre configuration de logging.

// bootstrap/app.php
use App\Exceptions\InvalidOrderException;
 
->withExceptions(function (Exceptions $exceptions) {
    $exceptions->report(function (InvalidOrderException $e) {
        // Logique de reporting personnalisee
    });
})

Arreter le Reporting pour Certains Types

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontReport([
        InvalidOrderException::class,
    ]);
})

Rendre les Exceptions

Par defaut, le gestionnaire d'exceptions Laravel convertira les exceptions en une reponse HTTP pour vous. Cependant, vous pouvez enregistrer une closure de rendu personnalisee pour les exceptions d'un type donne:

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->render(function (InvalidOrderException $e, Request $request) {
        return response()->view('errors.invalid-order', [], 500);
    });
})

Reponses JSON pour l'API

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->render(function (InvalidOrderException $e, Request $request) {
        if ($request->expectsJson()) {
            return response()->json([
                'error' => 'Commande invalide',
                'message' => $e->getMessage(),
            ], 500);
        }
    });
})

Exceptions HTTP

Certaines exceptions decrivent des codes d'erreur HTTP du serveur. Vous pouvez creer des reponses personnalisees pour des codes de statut HTTP specifiques:

abort(404);
abort(403, 'Non autorise');

Pages d'Erreur Personnalisees

Creez des vues personnalisees pour les pages d'erreur:

<!-- resources/views/errors/404.blade.php -->
@extends('layouts.app')
 
@section('content')
    <h1>Page Non Trouvee</h1>
    <p>Desole, la page que vous recherchez n existe pas.</p>
@endsection

Exceptions de Validation

Quand la validation echoue, Laravel lance automatiquement une ValidationException:

$validated = $request->validate([
    'email' => 'required|email',
    'password' => 'required|min:8',
]);

En savoir plus sur la gestion des erreurs dans Laravel depuis la documentation officielle.

Conclusion

La gestion des erreurs dans Laravel fournit une maniere elegante et unifiee de gerer les exceptions dans votre application. En personnalisant le gestionnaire d'exceptions, vous pouvez controler comment les erreurs sont reportees et rendues aux utilisateurs.

Bon codage avec Laravel 11!