web-dev-qa-db-fra.com

Laravel 5.5 gestion des exceptions personnalisées

J'utilise Laravel 5.5 et je suis nouveau dans ce domaine. En ce qui concerne le traitement des erreurs, j’ai constaté que Laravel possède de nombreuses façades et fonctionnalités intégrées. Cependant, il me semble que je n’ai pas compris toutes les fonctionnalités qu’il fournit (pour me simplifier la vie à l’origine). 

Ce que je veux, c'est que chaque fois qu'une erreur se produit (c'est-à-dire qu'une exception soit levée), Laravel redirige l'utilisateur vers la page précédente et affiche un message d'erreur (pas l'erreur elle-même, vous ne voulez pas que les utilisateurs puissent pour voir cela en production, j'ai pensé à quelque chose comme 'Error occurred'). 

J'ai inclus un affichage des erreurs dans toutes mes vues. Il me suffit donc de passer (via POST je suppose) un tableau message avec title et message, ainsi que style (à l'aide de styles Bootstrap, par exemple danger, warning, success). Idéalement, l'exception est enregistrée quelque part afin que je puisse reproduire les erreurs ultérieurement.

Ma solution actuelle est dépourvue de fonctionnalités Nice de Laravel puisque je try-catch partout et que je redirige vers une page spécifique (j'ai choisi d'être "la bonne" pour cette erreur). En outre, cela oppresse l'erreur d'origine. 

Quelle est la meilleure approche pour mon désir?

4
Core-i9

Regardez le gestionnaire d'exceptions de Laravel: https://laravel.com/docs/5.5/errors#the-exception-handler

Vous pouvez obtenir ce que vous voulez en implémentant une méthode render() personnalisée qui renverrait une réponse de redirection.

La méthode render est responsable de la conversion d'une exception donnée en une réponse HTTP à renvoyer au navigateur.

4
jedrzej.kurylo

C'est ma solution qui exclut la validation et prend donc en charge l'erreur de validation intégrée de Laravel, alors que toutes les autres erreurs sont affichées différemment:

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

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

Merci à @ jedrzej.kurylo qui a posté une solution sur les points de départ. Le code ci-dessus doit être utilisé sous /App/Exceptions/Handler.php, fonction render.

1
Core-i9