多应用模式下 controller/Error.php 讨论

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

happy技师

2020-03-18

问题一:

老师, 这章演示的
BaseController 下添加的 __call() 方法,
和 controller/Error.php 的 __call() 方法,
都是针对单应用模式吗?

问题二:

多应用模式下的报错被 app/api/exception/Http 接管, 是否就没有必要设置两个 __call() 方法了?

结论: 我测试下来, 屏蔽两个 __call(), 报错同样也能显示成 json 格式输出
4种情况如下,
    找不到 控制器 报错时
       (一) 进 api/controller/Error.php/__call() 方法,
       (二) 进 app/api/exception/Http ,
    找不到 方法 报错时
       (三) 进 BaseController/__call() 方法,
       (四) 进 app/api/exception/Http ,
第一种情况: 没有进 api/controller/Error.php/__call() 方法 , 直接进了 app/api/exception/Http, 和第二种情况结果一样.
第二种情况: 图片描述

第三种情况: 图片描述

第四种情况: 图片描述

问题三:

app/api/exception/Http 我改写如下, 目的是 .env 文件 app_debug=true 时, 显示更多信息的报错, 方便调试; false或上线后统一 json 输出
这样写是否合适?
图片描述

APP_DEBUG = true 时:
图片描述

写回答

2回答

singwa

2020-03-18

亲爱的同学您好,很赞,问题问的很细,说明您对于问题进行了多方位的思考,很棒

第一个问题:  他不是针对单应用模式下的, 多应用模式也是可以。 您需要在对应用的时候也可以加上 Error.php类库文件 以及 __call ,可以仿照老师之前讲解的来

第二个问题:  多应用模式下最好 也加上 __call这种处理

第三个问题: 您写的这个可以,没问题。很棒。

1
1
happy技师
我又继续提问了, 请老师帮忙看一下~
2020-03-18
共1条回复

happy技师

提问者

2020-03-18

我知道为什么问题二 的第一种情况: 没有进 api/controller/Error.php/__call() 方法 , 直接进了 app/api/exception/Http

conf/route.php 配置如下

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

我开启了路由器后缀, 然后顺手把 empty_controller = 'Error' 改成了 'ErrorController'

导致 /think/route/dispatch/Controller.php 文件中的 controller 方法 174行 判断错误

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

把 empty_controller 改回 'Error', 找不到 控制器 就能够进入 ErrorController.php 的 __call() 了.

问题四:  默认控制器名 default_controller 是否只需写 'Index' ?

问题五: 是否强制使用路由 url_route_must=true 时, 没有配置的路由都会提示 Route Not Found, __call() 又不起作用了, 是否还需要写?

0
3
singwa
回复
happy技师
客气了,祝您学习愉快
2020-03-20
共3条回复

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

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

1448 学习 · 1308 问题

查看课程