博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThinkPHP 5.0/5.1 自定义404界面的配置
阅读量:4987 次
发布时间:2019-06-12

本文共 2310 字,大约阅读时间需要 7 分钟。

★ 背景

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

框架:ThinkPHP 5.1,ThinkPHP5.0.20

★ 配置过程

♩. 修改 config.app 文件
第一,需要关闭调试模式

// 应用调试模式'app_debug' => false,
一般在项目的开发过程中,可以设置为"true",但是项目上线部署后,一定要关闭调试模式

第二,增加或修改配置项: http_exception_template

如果是 ThinkPHP.5.0 框架,进行修改如下:

 

1 'http_exception_template' => [2 // 定义404错误的重定向页面地址3 404 => APP_PATH . 'index/view/exception_html/404.html',4 500 => APP_PATH . 'index/view/exception_html500.html',5 ],

 

如果是 ThinkPHP.5.1 框架,进行修改如下:

 

1 //TODO 自定义异常请求码的页面配置 建议只做非500错误页面2 'http_exception_template' =>3 [4 404 => Env::get('app_path') . 'index/view/exception_html/404.html',5 500 => Env::get('app_path') . 'index/view/exception_html/500.html',6 ],

 

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

 

♪. 静态资源的引用

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

 

★ 演示效果

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

 

★ 500不支持

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

源代码参考如下:

 

1 if ($e instanceof HttpException) { 2 return $this->renderHttpException($e); 3 } else { 4 $response = $this->convertExceptionToResponse($e); 5 $code = $response->getCode(); 6 if ($code == 500){ 7 $e = new HttpException(500,'The server is dead !',$e); 8 return $this->renderHttpException($e); 9 }else{10 return $this->convertExceptionToResponse($e);11 }12 //修改前13 //return $this->convertExceptionToResponse($e);14 }

 

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

②. 另一种解决方案

修改 config.app 文件中的配置项 exception_tmpl,线上和线下可分开配置

//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 为后者配置项,如此一来, 报错页面如下:

 

★ 附录

♩ 推荐学习
♪ 动态设置模板
如果针对不同的客户端情况可以动态设置模板,比如类似如下的代码形式

1 if (request()->isMobile()) {2 config('template.view_path','application\\index\\view\\wap\\');3 } else {4 config('template.view_path','');5 }

 

转载于:https://www.cnblogs.com/zmdComeOn/p/10647925.html

你可能感兴趣的文章
跟牛牛老师学习python自动化的第六天
查看>>
Vim 加 Gmail 变身 Vmail
查看>>
(5) Orchard 开发之 Localization and NullLocalizer
查看>>
分类算法(1)--KNN
查看>>
妙用python之编码转换
查看>>
hdu 4451 Dressing 衣服裤子鞋 简单容斥
查看>>
linux一些基本常识(四)
查看>>
Docker架构
查看>>
C#设计模式(3)——工厂方法模式
查看>>
过目不忘JS正则表达式
查看>>
Colidity-- StoneWall
查看>>
Leetcode 904. Fruit Into Baskets
查看>>
怎样连接REDIS服务端
查看>>
No.026:Remove Duplicates from Sorted Array
查看>>
SpringBoot项目的几种创建方式,启动、和访问
查看>>
解决"disabled". Expected Boolean, got Number with value 0
查看>>
OC--init,initialize,initWithCoder:,initWithFrame:各方法的区别和加载顺序
查看>>
Exponentiation
查看>>
本地jar上传到本地仓库
查看>>
四则运算C++带Qt界面版本,吾王镇楼。。。。。
查看>>