ThinkPHP6需在config/app.php中设置'controller_layer'=>2并用点号分隔路由控制器名(如'admin.user.Auth/login'),同时确保命名空间、目录结构、Composer自动加载三者严格匹配。

ThinkPHP6 如何绑定路由到多级控制器目录
ThinkPHP6 默认不支持多级控制器(如 admin/user/AuthController),必须显式启用并配合路由规则才能让 Route::get('admin/user/login', 'admin.user.Auth/login') 这类写法生效。直接写带斜杠的控制器路径会报 Class not found,因为框架默认只在一级 controller/ 下找类。
- 先在
config/app.php中开启控制器分级:'controller_layer' => 2(值为整数,表示允许几级子目录) - 控制器文件需按层级存放:例如
app/controller/admin/user/AuthController.php,命名空间必须匹配路径:namespace appcontrollerdminuser; - 路由地址中控制器部分用点号(
.)代替斜杠,如'admin.user.Auth/login',不能写成'admin/user/Auth/login'或'Auth/login' - 若用
Route::domain()或Route::group()套一层,内部路由仍需遵守点号分隔规则,例如:Route::group('admin', function () { Route::get('user/login', 'admin.user.Auth/login'); });
ThinkPHP5 多级控制器路由写法差异
ThinkPHP5 的多级控制器依赖 CONTROLLER_LEVEL 配置,但路由绑定逻辑与 TP6 不同:它不解析点号,而是靠 PATH_INFO 自动截取前 N 段作为控制器名。这意味着你不能在路由规则里直接写 'admin.user.Index/index',而要靠框架自动推导。
- 在
config.php中设置:'CONTROLLER_LEVEL' => 2 - 控制器路径为
app/controller/admin/user/Index.php,命名空间为appcontrollerdminuser - 路由定义仍用传统格式:
Route::get('admin/user/:id', 'Index/read'),其中Index是最后一级类名,前面两级由CONTROLLER_LEVEL和 PATH_INFO 自动补全 - 关键限制:这种模式下
Route::domain()和Route::group()内部无法改变控制器层级解析逻辑,必须确保请求 URL 的 PATH_INFO 真实包含对应层级,比如访问/admin/user/123才能触发admin/user/Index类
为什么 url() 生成的链接常出错
多级控制器场景下,url('admin.user.Auth/login') 在 TP6 中能正常工作,但在 TP5 中会失败——因为 TP5 的 url() 函数不识别点号分隔,它只认 'Index/index' 这种单层写法。一旦用了多级目录,就必须手动拼接或改用 Url::build() 配合完整命名空间。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- TP6 推荐写法:
url('admin.user.Auth/login', ['id' => 1])→ 输出/admin/user/login?id=1 - TP5 中等效方案:要么放弃多级目录,要么在模板中写死路径,或自定义辅助函数解析
admin.user.Auth到admin/user/Auth - 别依赖
url('Index/index')自动适配多级结构——它永远只找一级控制器,不会向上回溯目录 - 缓存问题:修改
controller_layer或CONTROLLER_LEVEL后,必须清空路由和运行时缓存:php think route:clear && php think clear
最易忽略的命名空间与自动加载冲突
即使路径、配置、路由都对,Class not found 错误仍高频出现,根本原因不是路由没绑对,而是 Composer 自动加载没覆盖多级控制器目录。
立即学习“PHP免费学习笔记(深入)”;
- 检查
composer.json中psr-4映射是否包含完整层级,例如:"autoload": { "psr-4": { "app\controller\": "app/controller/" } } - 运行
composer dump-autoload强制刷新映射,否则新增的admin/user/子目录类永远不会被加载 - 命名空间末尾不能多加反斜杠,
namespace appcontrollerdminuser;(结尾有)会导致类加载失败 - TP6 中控制器类名必须与文件名严格一致(大小写敏感),
AuthController.php对应class AuthController,写成Auth或authcontroller都会报错
Route::group('admin') + 统一命名空间更稳妥。


















