本文译自 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 之自定义错误页面
裁纸刀下版权所有,允许非商业用途转载,转载时请原样转载并标明来源、作者,保留原文链接。
写的很好 感谢分享