wake-up-neo.net

Laravel 5.5 Benutzerdefinierte Ausnahmebehandlung

Ich verwende Laravel 5.5 und bin neu darin. In Bezug auf die Fehlerbehandlung stellte ich fest, dass in Laravel viele Fassaden und Funktionen integriert sind. Allerdings habe ich anscheinend nicht alle Funktionen im Blick (um mir das Leben zu erleichtern).

Ich möchte, dass Laravel den Benutzer bei jedem Auftreten eines Fehlers (dh Ausnahmefehler) zur vorherigen Seite umleitet und eine Fehlermeldung anzeigt (nicht den Fehler selbst, den Benutzer nicht können soll) um dies in der Produktion zu sehen, dachte ich an etwas wie 'Error occurred').

Ich habe in all meinen Ansichten eine Anzeige für Fehler eingefügt, daher muss ich nur ein Array message mit title und message sowie style (unter Verwendung von Bootstrap-Stilen, z. B. danger) übergeben (über POST). warning, success). Idealerweise wird die Ausnahme irgendwo protokolliert, damit ich später Fehler reproduzieren kann.

Meine derzeitige Lösung enthält keine netten Funktionen von Laravel, da ich einfach überall try-catch und auf eine bestimmte Seite umleite (ich habe mich dafür entschieden, für diesen Fehler "die richtige" zu sein). Dies unterdrückt auch den ursprünglichen Fehler.

Was ist der beste Ansatz für meinen Wunsch?

4
Core-i9

Schauen Sie sich den Ausnahmehandler von Laravel an: https://laravel.com/docs/5.5/errors#the-exception-handler

Sie können die gewünschten Ergebnisse erzielen, indem Sie eine benutzerdefinierte render()-Methode implementieren, die eine Umleitungsantwort zurückgibt.

Die Methode render ist für die Konvertierung einer bestimmten Ausnahme in eine HTTP-Antwort verantwortlich, die an den Browser zurückgesendet werden soll.

4
jedrzej.kurylo

Dies ist meine Lösung, die die Validierung ausschließt und somit Laravels eingebauten Validierungsfehler unterstützt, während jeder andere Fehler anders angezeigt wird:

Log::error($exception->getMessage());
if($exception instanceof \Illuminate\Validation\ValidationException)
   return parent::render($request, $exception);

return redirect(URL::previous())->withErrors(['Error', 'Unknown Error']);

Vielen Dank an @ jedrzej.kurylo, der eine Lösung für den Anfang gepostet hat. Der obige Code ist unter /App/Exceptions/Handler.php, function render zu verwenden.

1
Core-i9