Laravel 5.0 系列 - 定制错误页
当你想在 Laravel 4 中定制错误页时(404页面) -- 例如,展示一张特别的喵星人图片,你可以参考: Dries Vints 写的这篇文章.
而在 Laravel 5 中,有些事情变得不一样了。直接查看解决方案。
在代码中追踪执行流程
在 Laravel 5 中,所有自定义的错误和异常的处理都集中在 app/Exceptions/Handler.php
文件中了。是否还记得这就是我们添加 whoops 包 的地方。
请注意,默认行为如下:
/**
* 在 HTTP 响应中回执异常页面
*
* @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}" 命名的视图(view),就会被加载并展示出来(这个视图文件还会接收到一些参数)。
实战
因此,如果你定义了 “errors.{errorStatusCode}” 方式命名的视图,框架就会自动根据 errorStatusCode(错误状态码) 绘制并展示出来。
知道了原理,接下来定制 404 错误页就简单了,只要将视图文件放到如下路径就行了:
resources/views/errors/404.blade.php
搞定收工!
原文地址:https://mattstauffer.co/blog/laravel-5.0-custom-error-pages