前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ThinkPHP 5.1自定义404界面的配置

ThinkPHP 5.1自定义404界面的配置

作者头像
泥豆芽儿 MT
发布2018-09-11 11:34:39
1.5K0
发布2018-09-11 11:34:39
举报
文章被收录于专栏:木头编程 - moTzxx

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1333817

★ 背景

  • 还要啥背景,就是觉得不可能用框架自带的 404 界面呗.
  • 可能跟之前的版本配置方法有点区别,在此做一下简单的笔记 框架:ThinkPHP 5.1

★ 配置过程

♩. 修改 config.app 文件

  • 第一,需要关闭调试模式
代码语言:javascript
复制
// 应用调试模式
'app_debug'              => false,

一般在项目的开发过程中,可以设置为”true”,但是项目上线部署后,一定要关闭调试模式

  • 第二,增加或修改配置项: http_exception_template
代码语言:javascript
复制
//TODO 自定义异常请求码的页面配置 建议只做非500错误页面
    'http_exception_template'    =>
        [
            404 =>  Env::get('app_path') . 'index/view/exception_html/404.html',
            501 =>  Env::get('app_path') . 'index/view/exception_html/501.html',
        ],

上面的路径配置,对应的文件路径是这样的,同理可以扩展添加其他的请求码配置页:

♪. 静态资源的引用

  • 这一点其实没必要讲,我只是给一个参考
  • 为了项目的界面设计统一性,至少头部尾部都是一致的,以我为例,将自定义页面的静态文件都放置在了 public/errors 目录下

★ 演示效果

  • 在自己的项目链接中,随意输入不能访问的链接,则会出现配置的 404 界面,其他同理显示

★ 500不支持

①. 探讨参考

  • 根据以上的操作,其实并不能匹配响应出 500 页面
  • 追索源码发现跟 Handle 中的 render() 方法有关,进一步分析代码,应该是 500 情况不能实例化 HttpException 的原因
  • 原本试着修改了如下图中的对应代码,但是 框架默认将出错数据都认为了是 500 异常报错,这样一来就不能 debug 正常调试程序代码了

极不建议修改框架核心源代码,指不定又会整出来多少安全隐患,此处只是一个小提示而已!仅做了解即可…

②. 另一种解决方案

  • 修改 config.app 文件中的配置项 exception_tmpl,线上和线下可分开配置
代码语言:javascript
复制
//TODO 异常页面的模板文件,主要作为500或程序报错的处理页面 
//此为生产模式下(线下)的配置操作,便于代码排错
 'exception_tmpl'         => Env::get('think_path') . 'tpl/think_exception.tpl',
 //此为线上模式下的配置操作,便于隐藏内部错误数据,人性化显示
 //'exception_tmpl'         => Env::get('think_path') . 'tpl/self_exception.html',

对于上述的配置项,主要是制定好显示页面即可,源框架中是 tpl 文件,此处我直接复制了一个静态页面的源代码而已,具体的动态显示可以自己进行优化补充 …

③. 显示效果

  • 如果是在线下的测试环境,app_debug 开启,同时 exception_tmpl 为前者配置项,只要在控制器中随便写一点错误代码,就会出现500报错,则效果如下:
  • 如果是在线上的外网环境,app_debug 关闭,同时 exception_tmpl 为后者配置项,如此一来, 报错页面如下:

★ 附录

♩ 推荐学习

♪ 动态设置模板

  • 如果针对不同的客户端情况可以动态设置模板,比如类似如下的代码形式
代码语言:javascript
复制
if (request()->isMobile()) {
config('template.view_path','application\\index\\view\\wap\\');
} else {
config('template.view_path','');
}

♫ 想了想

  • 想了想,参考的源代码也没啥必要上传的,所以,自己动手哦 …
  • 重申,极不建议修改框架核心源代码
  • 其实我很好奇,ThinkPHP5.1 和 Laravel5.5 到底是什么关系?怎么设计的那么 像!像!像!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年01月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ★ 背景
  • ★ 配置过程
    • ♩. 修改 config.app 文件
      • ♪. 静态资源的引用
      • ★ 演示效果
      • ★ 500不支持
        • ①. 探讨参考
          • ②. 另一种解决方案
            • ③. 显示效果
            • ★ 附录
              • ♩ 推荐学习
                • ♪ 动态设置模板
                  • ♫ 想了想
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档