我想要一个自定义500错误页面。这可以通过在errors/500.blade.php
中创建视图来完成。
这适用于生产模式,但在调试模式下,我不再获取默认的异常/调试页面(看起来是灰色的并且说“哎呀出错了”)。
因此,我的问题是:如何为生产提供自定义500错误页面,但是当调试模式为真时,原始500错误页面是什么?
答案 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.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错误页面。
答案 5 :(得分:0)
如果您拥有APP_DEBUG=false
并且具有views / errors / 500.blade.php文件,则从Laravel 5.5+开始,这将自动发生。