Home Articles

Laravel在发生异常时停止执行,并使用某个默认模板显示消息 - 处理laravel中的异常

Asked
Viewed 1200 times
1

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

现在在我的代码中,每当发生异常时,laravel将其视为致命错误,立即停止执行并在某个模板中显示错误消息 .

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

我找到了一些方法

  • 将.env文件中的APP_DEBUG值更改为false . 但是这也会显示另一个页面,上面写着“哎呀!有些想要错的”;

  • 在App / Exceptions中的Handler.php中,我在非报告区域中放了一些例外 . 但该应用程序仍在报告它们

3 Answers

  • 0

    Custom HTTP Error Pages

    Laravel可以轻松显示各种HTTP状态代码的自定义错误页面 . 例如,如果要自定义404 HTTP状态代码的错误页面,请创建resources / views / errors / 404.blade.php . 此文件将在您的应用程序生成的所有404错误中提供 . 应该命名此目录中的视图以匹配它们对应的HTTP状态代码 . 由abort函数引发的HttpException实例将作为$ exception变量传递给视图 .

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

  • 0

    真的,你想要处理你的例外 . 将代码包装在try catch中,您可以执行各种操作(例如email / slack / log) . 处理完异常后,您仍然可以在catch中使用自定义http错误页面,以便最终用户在设计精美的页面上获得友好消息 . 甚至还内置了一个报告助手,允许您从外部登录并继续处理代码 .

    @Devon的上述答案:自定义HTTP错误页面可以为您提供您想要的内容 .

  • 0

    请注意几点:

    • App\Exceptions\Handler 类是记录应用程序触发的所有异常然后呈现给用户的位置 . 这个类有两个方法 report()render() ,两者都有自己的责任 .

    • report 方法用于记录异常 . 默认情况下, the report method passes the exception to the base class 记录异常 . 但是,您可以根据需要自由记录异常 . 例如,如果需要以不同方式报告不同类型的异常,则可以使用PHP instanceof比较运算符

    • render 方法负责将给定的异常转换为应该发送回浏览器的HTTP响应 . 默认情况下,异常将传递给基类,后者会为您生成响应 . 但是,您可以自由检查异常类型或返回自己的自定义响应 .

    在您的情况下,您希望返回异常的自定义消息,在 render() 中,您可以使用PHP instanceof比较运算符并返回您自己的逻辑 .

    Example :

    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以获取更多数据

Related