本文译自 Matt Stauffer 的系列文章.
在以往版本的 Laravel 中,假如你想自定义错误页面——比如当用户访问不存在的页面时显示一张猫的 GIF 动画图片——你可能会通过 Google 进行搜索,然后找到 Dries Vints 写的这个文档。
在 Laravel 5 中,这个问题得到了改进。>>直达解决方案
源代码解析
在新版本的 Laravel 中,所以处理自定义错误和异常的代码都移到了 app/Exceptions/Handler.php
里。如果你读了之前的 bring Whoops back, 你应该还记得就是通过这里的代码实现的。
但阅读代码时你可能发现了,默认是这样处理的:
/** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Exception $e * @return \Illuminate\Http\Response */ public function render($request, Exception $e) { if ($this->isHttpException($e)) { return $this->renderHttpException($e); } else { return parent::render($request, $e); } }
对所有的 HTTP 异常(比如 404 或者 503 这样的异常),它用 renderHttpException()
方法来处理,而这个方法并不是在这个文件中定义的。所以我们继续追溯到它的父类,Illuminate\Foundation\Exceptions\Handler
, 在这个类里面,我们找到了 renderHttpException()
方法的代码:
/** * Render the given HttpException. * * @param \Symfony\Component\HttpKernel\Exception\HttpException $e * @return \Symfony\Component\HttpFoundation\Response */ protected function renderHttpException(HttpException $e) { if (view()->exists('errors.'.$e->getStatusCode())) { return response()->view('errors.'.$e->getStatusCode(), [], $e->getStatusCode()); } else { return (new SymfonyDisplayer(config('app.debug')))->createResponse($e); } }
所以,如果存在 errors.{httpStatusCode}
的视图,它就会直接显示该视图(并且传入一些必要的信息)。
如何实现自定义
根据前文的分析,如果我们创建了一个名为 “errors.{errorStatusCode}” 的视图,当对应的异常码出现时,系统就会自动显示这个视图。
那么我们要做的事情就太简单了。比如你想自定义 404 错误页面的话,只要创建一个 resources/views/errors/404.blade.php
的视图文件,就可以了!
作者:小李刀刀
原文链接:[译]Laravel 5.0 之自定义错误页面
裁纸刀下版权所有,允许非商业用途转载,转载时请原样转载并标明来源、作者,保留原文链接。
写的很好 感谢分享