我正在寻找一种现代(Laravel 5.4)方式来显示仅针对HTTP(非ajax / fetch)响应的自定义500错误页面。我读了一些线程,但每个响应看起来像一个技巧或过时。在\App\Exceptions\Handler
中可能需要修改一些内容,但我没有找到正确的方式"。
是否有一种简单的方法可以在Laravel 5.4中显示致命错误(未捕获,返回500)的特定页面?
换句话说,当我的某个控制器上出现语法错误时,它会显示" Whoops出错了"一些HTML和500错误代码。我希望显示其他内容,使用与默认行为相同的规则(理想情况下仅适用于HTML浏览器,不适用于ajax / fetch等)。
编辑:仅限于生产环境。
答案 0 :(得分:2)
Laravel可以轻松显示各种HTTP状态代码的自定义错误页面。例如,如果您希望自定义404 HTTP状态代码的错误页面,请创建
resources/views/errors/404.blade.php
。此文件将在您的应用程序生成的所有404错误中提供。应该命名此目录中的视图以匹配它们对应的HTTP状态代码。由abort函数引发的HttpException
实例将作为$ exception变量传递给视图。
答案 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);
}