IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [译]Laravel 5.0 之自定义错误页面

    小李刀刀发表于 2015-03-13 08:50:12
    love 0

    本文译自 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 的视图文件,就可以了!



沪ICP备19023445号-2号
友情链接