添加自定义500错误页面,仅适用于Laravel中的生产

shyt4zoc  于 2023-02-14  发布在  其他
关注(0)|答案(8)|浏览(158)

我想有一个自定义的500错误页面。这可以通过在errors/500.blade.php中创建一个视图来简单地完成。
这对于生产模式来说是很好的,但是在调试模式下,我不再得到默认的异常/调试页面(看起来是灰色的,并说"哎呀,出了问题")。
因此,我的问题是:我怎么能有一个自定义的500错误页生产,但原来的500错误页时,调试模式是真的?

kulphzqa

kulphzqa1#

只需将此代码添加到\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);
    }
}
5t7ly7z5

5t7ly7z52#

我发现解决问题的最佳方法是将以下函数添加到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 
}

欢迎更好的解决方案!

xxhby3vn

xxhby3vn3#

从Laravel 5.5+开始,如果你有APP_DEBUG=false并且有views/errors/500.blade.php文件,这将自动发生。
https://github.com/laravel/framework/pull/18481

von4xj4u

von4xj4u4#

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

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

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

convertExceptionToResponse方法可以纠正导致500状态的错误。

9lowa7mx

9lowa7mx5#

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

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

njthzxwz6#

将此代码添加到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错误页.

w6lpcovy

w6lpcovy7#

在Laravel 8.x & 9.x中,您可以使用以下方法:
在项目根文件夹的.“env”文件中,将APP_DEBUG设置为false
然后在~/resources/views/errors中创建一个名为500.blade.php的文件(如果还没有,请创建errors文件夹)。
这将在任何500服务器错误响应上呈现自定义页面。

oalqel3c

oalqel3c8#

在Laravel 9.x中,最简单的方法是将以下内容添加到app/Exceptions/Handler.php

protected function getHttpExceptionView(HttpExceptionInterface $e)
    {
        // In debug mode we do not want to show our custom error views
        if (config('app.debug')) {
            return null;
        }

        return parent::getHttpExceptionView($e);
    }

相关问题