当出现异常并使用某些默认模板显示消息时,Laravel停止执行-处理laravel中的异常

时间:2018-07-03 13:04:58

标签: php laravel

我正在使用最新版本的laravel(5.6)

现在在我的代码中,只要出现异常,laravel就会将其视为致命错误,请立即停止执行并在某些模板中显示错误消息。

但是我不想,我想处理异常并显示一些自定义错误消息

我发现了

  1. 将.env文件中的APP_DEBUG值更改为false。但这也显示了另一个 页面上显示消息“哇!有些东西想错了”;

  2. 在位于app / Exceptions中的Handler.php中,我在非报告区域中放置了一些异常。但是该应用仍在报告它们

3 个答案:

答案 0 :(得分:0)

自定义HTTP错误页面

  

Laravel可轻松显示各种HTTP的自定义错误页面   状态代码。例如,如果您希望自定义错误页面   404 HTTP状态代码,创建一个resources / views / errors / 404.blade.php。   该文件将在您的所有404错误中得到处理   应用。此目录中的视图应命名为匹配   它们所对应的HTTP状态代码。 HttpException实例   由中止函数引发的异常将作为   $ exception变量。

https://laravel.com/docs/5.6/errors#custom-http-error-pages

答案 1 :(得分:0)

您确实想处理异常。将代码包装在try catch中,您可以做所有事情(例如电子邮件/闲置文件/日志)。处理完异常后,您仍然可以在catch中使用自定义的http错误页面,以便最终用户在设计精美的页面上获得友好的消息。甚至还内置了一个报表帮助器,可让您从外部登录并继续处理代码。

@Devon的上述答复是:自定义HTTP错误页面也可以为您提供真正想要的东西。

答案 2 :(得分:0)

请注意一些要点:

  1. App \ Exceptions \ Handler 类是记录由应用程序触发的所有异常,然后将其呈现给用户的地方。此类具有两种方法 report() render(),它们都有自己的职责。
  2. 报告方法用于记录异常。默认情况下,报告方法将异常传递给记录异常的基类。但是,您可以随意记录异常。例如,如果您需要以不同的方式报告不同类型的异常,则可以使用PHP instanceof比较运算符
  3. render 方法负责将给定的异常转换为HTTP响应,然后将其发送回浏览器。默认情况下,该异常将传递给基类,该基类将为您生成响应。但是,您可以自由检查异常类型或返回自己的自定义响应。

就像您要返回异常的自定义消息一样,在 render()中,您可以使用PHP实例比较运算符并返回自己的逻辑。

示例:

if($exception instanceof  PostTooLargeException || $exception instanceof  FileException){
     return response()->json([
        'error' => true,
        'error_message' => "The file you are trying to upload exceeds the maximum limit. Please try to upload a smaller file."
     ],200); 
}

通过https://laravel.com/docs/5.6/errors获取更多数据