多应用模式下Error.php 应该怎么处理?

来源:3-5 健壮系统服务-杜绝无效请求

qq_玩乐_0

2019-12-19

当多应用模式下 Error.php文件应该放置在什么地方? 如果能够做到一个Error.php文件作用于全部应用呢?

写回答

5回答

keryz

2019-12-19

如果是多应用模式下 Error.php文件是需要在对应的模块下面定义。

1、代码定位到 /think/route/dispatch/Controller.php 文件中的 controller 方法

//img.mukewang.com/szimg/5dfb3c710900f5ec04940298.jpg

2、可以看到当控制器不存在就会走到 elseif 中的控制器

//img.mukewang.com/szimg/5dfb3ced09610d2f22240926.jpg

    比如请求的地址是 www.tp6.com, 那么返回的就是 app\controller\Error

//img.mukewang.com/szimg/5dfb3d3409c94fc906180226.jpg


  如果请求的地址是 www.tp6.com/admin那么返回的就是 app\admin\controller\Error对应其他也是如此。

//img.mukewang.com/szimg/5dfb3d72094c9d0f06860204.jpg

    

那么如果要定义一个公共的Error文件就需要一个固定的文件地址。

比如我下面修改的代码

1、在config加入配置项

//img.mukewang.com/szimg/5dfb3e1a09ff470010080144.jpg

2、修改源代码 可以还有更好的方式但是我目前想到的就是这样的。

//img1.sycdn.imooc.com/szimg/5dfb3e8009c9da4d21580904.jpg


//img.mukewang.com/szimg/5dfb3ea909aa0bae07240286.jpg

这样配置的话不管是哪个模块都会对应到common/controller/Errro.php文件中。


//img.mukewang.com/szimg/5dfb3f0809a9461f17620462.jpg

//img.mukewang.com/szimg/5dfb3f42091ae24909600198.jpg

7
3
keryz
回复
qq_玩乐_0
嗯呢,大体的思路是这个样子,还有优化的空间,你可以根据自己的需求来设置。
2019-12-20
共3条回复

天经地义

2019-12-19

Error.php是指异常处理的文件吗,如果是的话,全局异常处理类在app目录下的provider.php文件的'think\exception\Handle'参数指定异常处理类;

如果是多应用每个模式下的异常处理类,比如你admin模块,那你就在admin目录下创建一个provider.php文件指定'think\exception\Handle',同理如果是api模块,就在api目录下定义provider.php文件;

provider.php文件有优先级,如果模块下没定义会自动使用app下的,如果模块目录下有定义,那会使用模块里面定义的。

2
0

左手边的回忆

2019-12-21

经过测试,在多应用模式下,在app\controller\Error.php任然能够给生效(在没有更改源码的情况下)

1
0

北城以北是忧愁

2019-12-29

多应用下也可以显示,只要把erroe.php放到当前模块下的controller目录下,修改正确的命名空间即可//img1.sycdn.imooc.com/szimg/5e083ee308e7c51a02520117.jpg
//img.mukewang.com/szimg/5e083f0708411b0010010495.jpg

0
0

慕莱坞3268959

2019-12-19

采纳的才是正解

0
0

全流程开发 TP6.0实战高并发电商服务系统

一课就能掌握TP6.0基础及运用,打造完整高并发的电商后端项目

1447 学习 · 1308 问题

查看课程