[译]Laravel 5.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 的视图文件,就可以了!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玩转JavaEE

Redis之AOF持久化

上篇文章和小伙伴们聊了使用快照的方式实现redis数据的持久化,这只是持久化的一种方式,本文我们就来看看另一种持久化方式,AOF(append-only fil...

840
来自专栏ytkah

Laravel展示产品-CRUD之show

  上一篇讲了Laravel创建产品-CRUD之Create and Store,现在我们来做产品展示模块,用到是show,①首先我们先修改controller...

783
来自专栏跟着阿笨一起玩NET

winform系统自动登录实现

转载:http://www.cnblogs.com/wuhuacong/archive/2012/08/21/2648339.html

1261
来自专栏小狼的世界

使Windows Vista 也支持cUrl扩展

我们都知道PHP的扩展在php.ini中只要将extension前的注释去掉就可以,可是我在Vista下使用php_curl.dll时,却怎么都无法正常运行,到...

842
来自专栏Python攻城狮

Django教程(四)- Django模板及进阶

需求:编写注册提交,“密码”与“确认密码”不一致,显示密码不一样。成功后在另一个页面显示 代码操作:

992
来自专栏专注研发

YARN调试过程中的常见问题

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar wordcount ...

1781
来自专栏.NET技术

.net core实践系列之SSO-同域实现

SSO的系列还是以.Net Core作为实践例子与大家分享,SSO在Web方面复杂度分同域与跨域。本篇先分享同域的设计与实现,跨域将在下篇与大家分享。

3432
来自专栏散尽浮华

redis持久化策略梳理及主从环境下的策略调整记录

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。可以不定期的通过异步方式保存到磁盘上(即“半持久化模式”...

44210
来自专栏PhpZendo

Redis 持久化(persistence)技术口袋书

RDB 持久化:可以在指定时间间隔内,生成数据集在这个时间点的快照。 AOF 持久化:通过记录服务器执行的所有写操作命令,在服务器重启时,通过重新执行这些命令来...

841
来自专栏FreeBuf

简析60度CMS的Cookies欺骗漏洞

前言 本篇文章只是为了和大家分享漏洞的挖掘经验和思路,同时让大家认识到 Cookies 欺骗漏洞的危害和严重性。 漏洞发现时间:2017.8.16,因产商无回应...

2728

扫码关注云+社区