仅在 Laravel 中为生产添加自定义 500 错误页面
Add custom 500 error page only for production in Laravel
我想要一个自定义 500 错误页面。这可以简单地通过在 errors/500.blade.php
中创建一个视图来完成。
这对于生产模式来说很好,但是在调试模式下我不再获得默认的异常/调试页面(看起来是灰色的 "Whoops something went wrong")。
因此,我的问题是:如何在生产环境中使用自定义 500 错误页面,但在调试模式为真时使用原始 500 错误页面?
只需在\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);
}
}
我发现解决问题的最佳方法是将以下函数添加到 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
}
欢迎更好的解决方案!
将代码添加到 app/Exceptions/Handler.php
文件里面 Handler
class:
protected function convertExceptionToResponse(Exception $e)
{
if (config('app.debug')) {
return parent::convertExceptionToResponse($e);
}
return response()->view('errors.500', [
'exception' => $e
], 500);
}
convertExceptionToResponse
方法可以纠正导致 500 状态的错误。
将此代码添加到 app/Exceptions/Handler.php
、render
方法中。我认为这是干净和简单的。假设您有自定义 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 错误页面。
从 Laravel 5.5+ 开始,如果您有 APP_DEBUG=false
并且有一个 views/errors/500.blade.php 文件,这现在会自动发生。
在Laravel 7+中,可以进行以下方法
public function render($request, Throwable $exception)
{
if (!env('APP_DEBUG', false)) {
return response()->view("error500");
} else {
return parent::render($request, $exception);
}
}
在Laravel 8.x
& 9.x
中,您可以使用以下方法:
在项目根目录下的'.env'文件中,
将 APP_DEBUG
设置为 false
然后在 ~/resources/views/errors
中创建一个名为 500.blade.php
的文件
(如果您还没有错误文件夹,请创建它)。
这将在任何 500 服务器错误响应上呈现自定义页面。
我想要一个自定义 500 错误页面。这可以简单地通过在 errors/500.blade.php
中创建一个视图来完成。
这对于生产模式来说很好,但是在调试模式下我不再获得默认的异常/调试页面(看起来是灰色的 "Whoops something went wrong")。
因此,我的问题是:如何在生产环境中使用自定义 500 错误页面,但在调试模式为真时使用原始 500 错误页面?
只需在\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);
}
}
我发现解决问题的最佳方法是将以下函数添加到 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
}
欢迎更好的解决方案!
将代码添加到 app/Exceptions/Handler.php
文件里面 Handler
class:
protected function convertExceptionToResponse(Exception $e)
{
if (config('app.debug')) {
return parent::convertExceptionToResponse($e);
}
return response()->view('errors.500', [
'exception' => $e
], 500);
}
convertExceptionToResponse
方法可以纠正导致 500 状态的错误。
将此代码添加到 app/Exceptions/Handler.php
、render
方法中。我认为这是干净和简单的。假设您有自定义 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 错误页面。
从 Laravel 5.5+ 开始,如果您有 APP_DEBUG=false
并且有一个 views/errors/500.blade.php 文件,这现在会自动发生。
在Laravel 7+中,可以进行以下方法
public function render($request, Throwable $exception)
{
if (!env('APP_DEBUG', false)) {
return response()->view("error500");
} else {
return parent::render($request, $exception);
}
}
在Laravel 8.x
& 9.x
中,您可以使用以下方法:
在项目根目录下的'.env'文件中,
将 APP_DEBUG
设置为 false
然后在 ~/resources/views/errors
中创建一个名为 500.blade.php
的文件
(如果您还没有错误文件夹,请创建它)。
这将在任何 500 服务器错误响应上呈现自定义页面。