Laravel 5.5自定义异常处理

时间:2017-11-11 12:32:43

标签: php laravel laravel-5 laravel-5.5

我正在使用Laravel 5.5并且是新手。关于错误处理,我发现Laravel内置了许多外观和功能,但是,我似乎没有把它包围在它提供的所有功能(最初让我的生活更轻松)。

我想要的是每当发生错误(即抛出异常)时,Laravel会将用户重定向到上一页并显示错误消息(不是错误本身,您不希望用户能够看到此错误在生产中;我想到了'Error occurred')之类的东西。

我在所有视图中都包含一个显示错误的显示,所以我只需要传递(通过POST我假设)一个包含messagetitle的数组message,以及style(使用引导样式,例如dangerwarningsuccess)。理想情况下,异常会记录在某个地方,以便我以后能够重现错误。

我目前的解决方案是没有Laravel的优秀功能,因为我只是try-catch到处并重定向到特定页面(我选择为这个错误的'正确')。而且,这压迫了原始错误。

对我的愿望最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

看看Laravel的异常处理程序:https://laravel.com/docs/5.5/errors#the-exception-handler

您可以通过实现返回重定向响应的自定义render()方法来实现您的目标。

  

render方法负责将给定的异常转换为应该发送回浏览器的HTTP响应。

答案 1 :(得分:1)

这是我的解决方案,它排除了验证,因此支持Laravel的内置验证错误,而其他每个错误都有不同的显示:

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

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

感谢@ jedrzej.kurylo发布了一个解决方案,从哪里开始。上述代码应在/App/Exceptions/Handler.php下使用,函数render