ThinkPHP 5.1 路由分组通过 Route::group() 聚合语义相关路由,支持统一前缀、后缀、正则约束及中间件挂载,提升可读性与可维护性。

ThinkPHP 5.1 实现路由分组管理,核心是用 Route::group() 把语义相关、路径前缀一致或权限/模块统一的路由聚合成一组,提升可读性、避免重复配置,并为中间件、URL 前缀、后缀等统一控制打下基础。
一、基础写法:闭包方式定义分组
最常用也最清晰的方式是在 route/route.php 中使用闭包定义分组:
- 第一参数是分组标识(如
'admin'或'api'),仅作命名,不影响路由匹配 - 第二参数是闭包函数,在其中逐条注册该组下的具体路由
- 链式调用
->prefix('admin/')可自动给所有子路由加统一前缀
示例:
复制代码Route::group('admin', function () {
Route::get('login', 'admin/Login/index');
Route::get('dashboard', 'admin/Index/index');
Route::get('user/list', 'admin/User/index');
})->prefix('admin/');
这样访问 /admin/login 就会正确映射到 admin/Login/index 方法,无需每条都写完整路径。
二、批量注册 + 公共规则:简化重复配置
当一组路由共享相同扩展名(如 .html)、正则约束或参数时,可用 ->ext()、->pattern() 等链式方法统一设置:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
->ext('html'):让所有子路由默认支持.html后缀(如/blog/123.html) -
->pattern(['id' => '\d+']):统一约束变量格式,避免每条重复写 - 多个规则可连写:
->ext('html')->pattern([...])
示例:
复制代码Route::group('blog', function () {
Route::get(':id', 'blog/Read/index');
Route::get(':year/:month', 'blog/Archive/index');
Route::get('/', 'blog/Index/index');
})->ext('html')->pattern(['id' => '\d+', 'year' => '\d{4}', 'month' => '\d{2}']);
三、结合模块与命名空间:避免控制器路径混乱
TP5.1 默认不自动绑定命名空间,若后台控制器在 app/admin/controller 下,需显式指定完整类名或确保自动解析路径正确:
- 推荐写法:
'admin/Login/index'—— 框架会按约定自动定位到app\admin\controller\Login - 若自定义了应用目录结构,建议配合
->namespace('app\admin\controller')(需确认版本支持)或统一规范命名空间 - 切勿在 URL 地址中硬写
/admin/,应全部通过url('admin/login')生成链接,便于后期调整前缀
四、分组嵌套与中间件统一挂载
分组支持多层嵌套,适合复杂权限或版本场景。外层中间件优先执行,前缀按顺序拼接:
- 例如先加认证中间件,再细分资源路由:
->middleware('auth')->group(...) - 两层前缀叠加:
Route::group('v1')->group('user')->prefix('user/')最终路径为/v1/user/xxx - 注意:中间件必须已注册(在
config/middleware.php或路由中传入类名),别名写法在 TP5.1 中可能受限
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










