ThinkPHP5.1中路由分组用于合并相同URL前缀的路由规则,简化ext、pattern、middleware等批量配置,提升匹配效率;最简可用需满足两要素:字符串分组名(如'api')和闭包函数,闭包内必须用完整命名空间注册子路由(如'api/User/read'),禁用数组式写法。

在ThinkPHP5.1中配置路由分组,是为了把相同URL前缀的路由规则合并管理,避免重复写前缀、参数约束和后缀设置,同时提升路由匹配效率——不设分组时,每条路由都得单独定义ext、pattern、middleware,稍一疏忽就漏配或写错位置,访问直接404或中间件不生效。
最简可用分组:两要素缺一不可
第一步:打开route/route.php文件,在return function()闭包内写入分组定义。
第二步:调用Route::group(),传入两个必需参数——字符串形式的分组名(如'api')和一个闭包函数。
第三步:在闭包内注册具体路由,路径必须带完整控制器命名空间,例如Route::get('user/:id', 'api/User/read');漏掉api/前缀或写成'User/read'会导致类找不到。
立即学习“PHP免费学习笔记(深入)”;
【分组名不是URL路径,只是逻辑标识;真正生效的路径由闭包内路由表达式+可选prefix共同决定】
批量设置后缀与参数规则
方法一:链式调用->ext('json')统一指定URL后缀,所有该分组下的路由自动识别/api/user/1.json这类地址,无需每条都加['ext'=>'json']。
方法二:用->pattern(['id'=>'\d+', 'name'=>'\w+'])批量约束变量格式,含:id的路由只匹配数字,否则直接返回404——不设pattern时,/api/user/abc也能进控制器,但可能引发类型错误。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
方法三:改用->prefix('v1/')把前缀从分组名移到prefix参数里,比如Route::group('api', function(){…})->prefix('v1/'),这样url('api/user')生成的是/v1/user,避免分组名api被误当实际路径段。
给整个分组加中间件
第一步:确认中间件类存在且可解析,例如app\middleware\Auth类必须有handle()方法。
第二步:中间件必须挂载到分组对象上,写成Route::group('admin', function(){…})->middleware(['Auth', 'Log'])。
第三步:绝对不要把->middleware()写在闭包内部某条路由后面,那样只对那一条生效,其余路由裸奔——ThinkPHP不会报错,但权限校验形同虚设。
这一步操作起来很简单,直接把中间件数组链在分组末尾就行。
用数组方式定义分组(仅限旧语法兼容)
ThinkPHP 5.1+ 已废弃数组式写法:Route::group('blog', [':id'=>'blog/read'])——这种写法会静默失效,页面报404但控制台无提示。
必须改用闭包方式,哪怕只有一条路由也要套一层function(){ Route::get('...'); }。
如果项目是从TP3升级而来,务必全局搜索Route::group(并逐个检查闭包结构,旧数组写法看着省事,实则路由根本没注册进去。


















