仅为Laravel中的生产添加自定义500错误页面

时间:2017-03-06 12:32:15

标签: laravel laravel-5 laravel-5.1

我想要一个自定义500错误页面。这可以通过在errors/500.blade.php中创建视图来完成。

这适用于生产模式,但在调试模式下,我不再获取默认的异常/调试页面(看起来是灰色的并且说“哎呀出错了”)。

因此,我的问题是:如何为生产提供自定义500错误页面,但是当调试模式为真时,原始500错误页面是什么?

6 个答案:

答案 0 :(得分:4)

我发现解决问题的最佳方法是将以下函数添加到App\Exceptions\Handler.php

protected function renderHttpException(HttpException $e)
{
    if ($e->getStatusCode() === 500 && env('APP_DEBUG') === true) {
        // Display Laravel's default error message with appropriate error information
        return $this->convertExceptionToResponse($e);
    }
    return parent::renderHttpException($e); // Continue as normal 
}

欢迎更好的解决方案!

答案 1 :(得分:1)

只需在\ App \ Exceptinons \ Handler.php中添加此代码:

public function render($request, Exception $exception)
{
    // Render well-known exceptions here

    // Otherwise display internal error message
    if(!env('APP_DEBUG', false)){
        return view('errors.500');
    } else {
        return parent::render($request, $exception);
    }
}

或者

public function render($request, Exception $exception)
{

    // Render well-known exceptions here

    // Otherwise display internal error message
    if(app()->environment() === 'production') {
        return view('errors.500');
    } else {
        return parent::render($request, $exception);
    }
}

答案 2 :(得分:1)

在 Laravel 7+ 中,您可以执行以下方法

public function render($request, Throwable $exception)
    {
        if (!env('APP_DEBUG', false)) {
            return response()->view("error500");
        } else {
            return parent::render($request, $exception);
        }
    }

答案 3 :(得分:0)

将代码添加到app/Exceptions/Handler.php类中的Handler文件:

protected function convertExceptionToResponse(Exception $e)
{
    if (config('app.debug')) {
        return parent::convertExceptionToResponse($e);
    }

    return response()->view('errors.500', [
        'exception' => $e
    ], 500);
}

convertExceptionToResponse方法可以获得导致500状态的错误。

答案 4 :(得分:0)

将此代码添加到app/Exceptions/Handler.phprender方法。我认为这很简洁。假设您有自定义500错误页面。

public function render($request, Exception $e) {
      if ($this->isHttpException($e)) {
        return $this->toIlluminateResponse($this->renderHttpException($e), $e);
    } elseif (!config('app.debug')) {
        return response()->view('errors.500', [], 500);
    } else {
      // return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e);
        return response()->view('errors.500', [], 500);
    }
}

当您需要默认的 whoops 错误页面进行调试时,请使用注释行。使用其他一个自定义500错误页面。

答案 5 :(得分:0)

如果您拥有APP_DEBUG=false并且具有views / errors / 500.blade.php文件,则从Laravel 5.5+开始,这将自动发生。

https://github.com/laravel/framework/pull/18481