TP6自定义异常处理器必须继承think\exception\Handle,绑定仅支持provider.php或config/app.php二者选一,需清除runtime/container/等缓存,且类路径、命名空间、文件名须严格一致。

TP6 中自定义 ExceptionHandle 必须继承 think\exception\Handle
直接新建类、写个 render() 方法是没用的。TP6 要求你的类必须显式继承 think\exception\Handle,否则容器注入时类型检查失败,会静默 fallback 到框架默认处理器。常见错误是沿用 TP5 的 ExceptionHandle 类名或继承 think\Exception,这在 TP6 里会导致 Class not found 或完全不调用。
绑定方式只有两种:provider.php 或 config/app.php
TP6 不读 config/exception.php 里的 handle 配置项,那个文件已废弃。生效路径只有:
-
app/provider.php中注册容器绑定:'think\exception\Handle' => \app\exception\MyExceptionHandler::class - 或在
config/app.php中设'exception_handle' => \app\exception\MyExceptionHandler::class
两个不能共存,选其一即可;provider.php 方式更底层、优先级更高,推荐使用。
runtime/container/ 和 runtime/cache/ 必须清掉
容器绑定不是“改完就生效”。TP6 启动时会把绑定关系缓存到 runtime/container/,旧缓存不清理,新绑定永远不加载。你改了 provider.php 却没效果,90% 是因为没执行:
立即学习“PHP免费学习笔记(深入)”;
-
php think clear:container(清容器绑定缓存) -
php think clear:config(清配置缓存,影响config/app.php方式) - 顺手也删掉
runtime/cache/目录,避免视图/路由等其他缓存干扰判断
类路径、命名空间、文件名三者必须严格一致
TP6 依赖 Composer 自动加载,任何一处错都会导致容器 resolve 失败,抛出 BindingResolutionException:
- 类定义在
app/exception/MyExceptionHandler.php - 命名空间必须是
app\exception(与目录结构完全对应) -
provider.php里写的类名必须带完整命名空间:\app\exception\MyExceptionHandler::class,不能漏掉开头的反斜杠 - 确认
composer dump-autoload已执行,且class_exists('\app\exception\MyExceptionHandler')返回true
多应用模式下,还要确认你改的是当前应用目录下的 provider.php,不是根目录或其它应用的文件。



















