ThinkPHP 6.0路由必须集中注册在app/route.php并返回RuleGroup实例,禁用静态方法调用;目标地址须用类@方法或数组;动态变量需通过pattern显式声明;URL生成须基于命名路由或数组,不可用字符串路径。

ThinkPHP 5.1 迁移到 6.0,路由写法不是“微调”,而是彻底重构。核心变化在于:从隐式匹配转向显式注册,从松散定义转向强约束结构。不改写法,路由基本不生效。
必须迁移到 app/route.php 并返回 RuleGroup 实例
TP6 不再支持在控制器、中间件或任意位置调用 Route::get() 等静态方法;所有路由必须集中注册在 app/route.php 文件中,且该文件必须返回一个 think\route\RuleGroup 实例(通常是 Route::group() 或 Route::rule() 的返回值)。
- 删除原
route/route.php或application/route.php中所有裸调用(如Route::get('user', 'index/user/index');) - 确保入口路由文件路径是
app/route.php,内容类似:
Route::get('index', 'index/index');
Route::get('user/:id', 'index/user/read')->name('user.read');
});
路径字符串写法失效,必须用类@方法或数组
TP5.1 支持 'index/user/read' 这类字符串控制器路径,TP6 已废弃。URL 路由目标必须明确指向可执行的 PHP 调用单元。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 推荐写法:使用完整类名 + 方法,例如
[\app\controller\Index::class, 'index'] - 兼容写法(需开启控制器自动解析):仅限单应用且未禁用时可用
'index/index',但不推荐依赖 - 资源路由
Route::resource()仍存在,但默认生成全部七种方法,若只需部分,应手动定义或配合->only(['index', 'read']),并注意其生成的路由标识名固定为控制器/方法格式
动态变量与正则规则必须显式声明
TP5.1 的 :id\d+ 这类简写正则语法在 TP6 中已移除。所有变量约束必须通过 pattern 参数单独配置。
立即学习“PHP免费学习笔记(深入)”;
- 错误写法:
Route::get('user/:id\d+', 'index/user/read'); - 正确写法:
Route::get('user/:id', 'index/user/read')->pattern(['id' => '\d+']); - 分组级 pattern 可统一设置:
Route::group('api/:version', ['pattern' => ['version' => '\d+\.\d+']], function () { ... });
URL 生成必须用命名路由或数组,禁用字符串路径
模板或代码中调用 url('index/index') 会报错。TP6 要求 URL 构建必须基于路由标识(name)或明确的控制器/方法数组。
- 优先使用命名路由:
Route::get('user/:id', 'index/user/read')->name('user.detail');,然后在模板中写{:url('[user.detail]', ['id' => 123])} - 也可用数组形式:
url([\app\controller\User::class, 'read'], ['id' => 123]) - 原
request()->module()、request()->controller()等方法不可用,获取当前路由参数请用request()->param('id')


















