设计500错误页面仅用于生产

时间:2017-02-27 13:06:05

标签: laravel laravel-5.4

我正在寻找一种现代(Laravel 5.4)方式来显示仅针对HTTP(非ajax / fetch)响应的自定义500错误页面。我读了一些线程,但每个响应看起来像一个技巧或过时。在\App\Exceptions\Handler中可能需要修改一些内容,但我没有找到正确的方式"。

是否有一种简单的方法可以在Laravel 5.4中显示致命错误(未捕获,返回500)的特定页面?

换句话说,当我的某个控制器上出现语法错误时,它会显示" Whoops出错了"一些HTML和500错误代码。我希望显示其他内容,使用与默认行为相同的规则(理想情况下仅适用于HTML浏览器,不适用于ajax / fetch等)。

编辑:仅限于生产环境。

3 个答案:

答案 0 :(得分:2)

  

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

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

答案 1 :(得分:0)

来自此主题的所选“最佳答案”:https://laracasts.com/discuss/channels/general-discussion/custom-error-page-er500

您可以修改\App\Exceptions\Handler::render()

public function render($request, Exception $exception)
{
    if (config('app.debug') && !$this->isHttpException($exception)) {
        $exception = new \Symfony\Component\HttpKernel\Exception\HttpException(500);
    }
    return parent::render($request, $exception);
}
  

您的例外通常会在日志中报告,但是woops页面将被您的500.blade.php视图替换。

答案 2 :(得分:0)

有时您必须捕获特定的异常才能呈现错误视图。在Laravel 5.4中,您可以通过编辑App \ Exceptions \ Handler类中的report()方法来完成此操作

public function report(Exception $exception)
{
    if ($exception instanceof CustomException) {
        // here you can log the error and return the view, redirect, etc...
    }

    return parent::report($exception);
}