Überblick
Wenn Sie ein neues Laravel-Projekt anlegen, sind Fehler- und Ausnahmebehandlung bereits vorkonfiguriert. Anpassungen nehmen Sie über die MethodewithExceptions in bootstrap/app.php vor.
Ablauf der Ausnahmebehandlung
Vom Auslösen einer Ausnahme bis zur Antwort an den Client durchläuft Laravel folgende Schritte:withExceptions-Closure übergebene Objekt $exceptions ist eine Instanz von Illuminate\Foundation\Configuration\Exceptions und verwaltet die gesamte Ausnahmebehandlung Ihrer Anwendung.
Debug-Einstellungen
Die Optiondebug in config/app.php steuert, wie viele Fehlerinformationen ausgegeben werden.
Standardmäßig übernimmt sie den Wert der Umgebungsvariable APP_DEBUG aus der .env-Datei.
Ausnahmen melden
Beim Reporting wird eine Ausnahme protokolliert oder an externe Dienste wie Sentry oder Flare gesendet. Standardmäßig wird gemäß den Einstellungen inconfig/logging.php in ein Log geschrieben.
Eigene Report-Callbacks
Möchten Sie je nach Ausnahmetyp unterschiedliche Report-Logik ausführen, übergeben Sie eine Closure an die Methodereport.
Laravel erkennt den Ausnahmetyp anhand der Type-Hints der Closure.
stop() auf oder geben Sie false zurück.
Helper report()
Wenn Sie eine Ausnahme ausschließlich melden möchten, ohne eine Fehlerseite anzuzeigen, verwenden Sie den Helper report().
Doppelte Reports verhindern
Wird dieselbe Ausnahme-Instanz mehrfach anreport() übergeben, entstehen doppelte Log-Einträge.
Mit dontReportDuplicates() protokolliert Laravel dieselbe Instanz nur beim ersten Mal.
Globaler Log-Kontext
Um allen Log-Einträgen zu Ausnahmen dieselben Informationen anzuhängen, verwenden Siecontext.
Die aktuell angemeldete Benutzer-ID wird, sofern verfügbar, automatisch mitgegeben.
context()-Methode in der Ausnahmeklasse
Definieren Sie in einer eigenen Ausnahmeklasse die Methode context(), um spezifische Kontextinformationen an das Log zu übergeben.
Log-Level anpassen
Um eine bestimmte Ausnahme mit einem bestimmten Log-Level zu erfassen, verwenden Sie die Methodelevel.
Reports drosseln
Wenn massenhaft Ausnahmen auftreten, können Sie die Reports mitthrottle steuern.
Limit.
Ausnahmen rendern
Beim Rendering wird eine Ausnahme in eine HTTP-Antwort umgewandelt. Standardmäßig erzeugt Laravel eine passende Antwort automatisch; Anpassungen sind aber möglich.Eigene Render-Callbacks
Übergeben Sie an die Methoderender eine Closure, um die Ausnahme in eine Antwort umzuwandeln.
NotFoundHttpException) lässt sich überschreiben.
Liefert die Closure keinen Wert, wird das Standardrendering verwendet.
Automatische Erkennung von JSON/HTML
Laravel entscheidet anhand desAccept-Headers, ob HTML oder JSON zurückgegeben wird.
Um diese Logik anzupassen, nutzen Sie shouldRenderJsonWhen.
Antwort insgesamt anpassen
Mitrespond können Sie die erzeugte Antwort weiter verändern.
Eigene Ausnahmeklassen
Sie können inapp/Exceptions/ eigene Ausnahmeklassen anlegen.
Definieren Sie in der Klasse Methoden report() und render(), werden sie automatisch aufgerufen – auch ohne Konfiguration in bootstrap/app.php.
Ausnahmeklasse erzeugen
1
Ausnahmeklasse erstellen
2
report() und render() implementieren
Die
report()-Methode unterstützt Dependency Injection per Type-Hint. Der Service Container von Laravel löst die Abhängigkeiten automatisch auf.Interface ShouldntReport
Für Ausnahmen, die nicht gemeldet werden sollen, implementieren Sie das Interface ShouldntReport.
Solche Ausnahmen werden nie gemeldet.
Ausnahmen auslösen
Helper abort()
Sie können von überall in der Anwendung eine HTTP-Fehlerantwort auslösen.
abort_if() / abort_unless()
Helfer, um Ausnahmen bedingt auszulösen.
Globale Steuerung von Ausnahmen
Ausnahmen gezielt ignorieren
ÜberdontReport bestimmen Sie Ausnahmen, die nicht gemeldet werden sollen. Individuelles Rendering bleibt weiter aktiv.
dontReportWhen.
Standardmäßig ignoriert Laravel bereits einige Ausnahmen wie 404-Fehler, CSRF-Token-Verstöße (419) und Origin-Konflikte (403).
Standardmäßig ignorierte Ausnahmen wieder melden
Um Ausnahmen, die Laravel standardmäßig ignoriert, wieder zu melden, verwenden SiestopIgnoring.
HTTP-Fehlerseiten
Zu jedem HTTP-Statuscode können Sie eigene Fehlerseiten definieren.Eigene Fehler-Views erstellen
Legen Sie im Verzeichnisresources/views/errors/ Blade-Vorlagen an, deren Dateiname dem Statuscode entspricht.
$exception mit den Fehlerdetails zur Verfügung.
Standard-Fehlervorlagen veröffentlichen
Wenn Sie die Standard-Fehlerseiten von Laravel als Ausgangspunkt verwenden möchten, holen Sie sie mitvendor:publish.
Fallback-Fehlerseiten
Als Fallback für Statuscodes ohne eigene View können Sie4xx.blade.php und 5xx.blade.php anlegen.
Praxisbeispiel: API-Ausnahmehandler
Bei APIs möchten Sie Ausnahmen immer als JSON zurückgeben. Nachfolgend ein Beispiel, wie Sie API-Fehler zentral inbootstrap/app.php verwalten.
Eigene API-Ausnahmeklasse
Eine gemeinsame Basisklasse für API-Ausnahmen ermöglicht konsistente Fehlerantworten aus jedem Endpunkt.Zusammenfassung
Reporting im Überblick
Reporting im Überblick
Rendering im Überblick
Rendering im Überblick
HTTP-Fehlerseiten im Überblick
HTTP-Fehlerseiten im Überblick
- Erstellen Sie Dateien wie
resources/views/errors/404.blade.php– Laravel nutzt sie automatisch. - Über die Variable
$exceptionerhalten Sie die Fehlerdetails. - Mit
php artisan vendor:publish --tag=laravel-errorsholen Sie sich die Standardvorlagen. 4xx.blade.php/5xx.blade.phpdienen als Fallback-Seiten.
Best Practices für die Produktion
Best Practices für die Produktion
- Setzen Sie
APP_DEBUG=falseund blenden Sie Stacktraces vor Nutzern aus. - Binden Sie externe Error-Tracker wie Sentry oder Flare an und verwalten Sie Fehler zentral.
- Nutzen Sie
throttle(), um Log-Fluten bei massenhaften Ausnahmen zu vermeiden. - Halten Sie bei API-Endpunkten ein konsistentes JSON-Fehlerformat ein.