多应用模式下 controller/Error.php 讨论
来源:3-5 健壮系统服务-杜绝无效请求
![](http://img1.sycdn.imooc.com/user/55f2ee370001843d06390639-100-100.jpg)
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回答
-
亲爱的同学您好,很赞,问题问的很细,说明您对于问题进行了多方位的思考,很棒
第一个问题: 他不是针对单应用模式下的, 多应用模式也是可以。 您需要在对应用的时候也可以加上 Error.php类库文件 以及 __call ,可以仿照老师之前讲解的来
第二个问题: 多应用模式下最好 也加上 __call这种处理
第三个问题: 您写的这个可以,没问题。很棒。
112020-03-18 -
happy技师
提问者
2020-03-18
我知道为什么问题二 的第一种情况: 没有进 api/controller/Error.php/__call() 方法 , 直接进了 app/api/exception/Http
conf/route.php 配置如下
我开启了路由器后缀, 然后顺手把 empty_controller = 'Error' 改成了 'ErrorController'
导致 /think/route/dispatch/Controller.php 文件中的 controller 方法 174行 判断错误
把 empty_controller 改回 'Error', 找不到 控制器 就能够进入 ErrorController.php 的 __call() 了.
问题四: 默认控制器名 default_controller 是否只需写 'Index' ?
问题五: 是否强制使用路由 url_route_must=true 时, 没有配置的路由都会提示 Route Not Found, __call() 又不起作用了, 是否还需要写?
032020-03-20
相似问题