TP5.1不兼容TP5.0的Route::group('prefix', ...)字符串前缀写法,必须改用闭包内完整路径(如'admin/user/:id')或域名分组绑定命名空间,且须清空runtime/route/缓存否则参数丢失、URL反解失败。

TP5.0 的路由分组写法在 TP5.1 中会直接导致参数丢失,不是配置没生效,而是分组规则解析逻辑变了——必须重写为闭包式分组或命名空间绑定形式。
TP5.1 不兼容 TP5.0 的 group() 语法
TP5.0 支持 Route::group('admin', function () { ... }); 这种写法,但 TP5.1 的路由解析器已移除对字符串前缀自动拼接的隐式处理。如果你沿用该写法,param('id') 在 /admin/user/123 中将始终返回 null。
- TP5.0 的
group('admin')会自动把:id映射到子路由路径段;TP5.1 不再做这层推导,只认显式声明的占位符 - 错误示例:
Route::group('admin', ['middleware' => 'auth'], function () { Route::get('user/:id', 'Admin/User/read'); });→ 访问/admin/user/123时param('id')为空 - 正确做法:去掉字符串前缀,改用闭包内完整路径 + 显式占位符
必须显式声明所有占位符,不能依赖分组“继承”
TP5.1 要求每个路由规则里的变量都得在路径中明确定义,哪怕它看起来“属于分组”。否则 param() 拿不到,URL::build() 也反解失败。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 错:用
Route::get('user/:id', ...)在 group 里 → 实际匹配路径是/user/123,不是/admin/user/123 - 对:写成
Route::get('admin/user/:id', 'Admin/User/read'),且控制器方法签名必须含$id参数 - 若需复用逻辑,用命名空间绑定:
Route::domain('admin')->group(['namespace' => 'app\controller\admin'], function () { Route::get('user/:id', 'User/read'); }); - 注意大小写:Linux 下控制器类名
User.php必须对应User,不能是user或UserController
升级后还要清空 runtime/route/ 缓存
TP5.1 的路由缓存格式与 TP5.0 不兼容,残留文件会导致新路由规则不加载,表现为部分路径 404、参数取不到、URL::build() 生成错误 URL。
立即学习“PHP免费学习笔记(深入)”;
- 进入项目根目录,执行:
php think clear:route(TP5.1 支持)或手动删掉runtime/route/全部内容 - 别只清
runtime/cache/,route/是独立缓存目录,漏掉就白改 - 如果用了 OPcache,还需确认
opcache.save_comments=1已开启,否则基于注释的参数绑定(如@param)会失效
最易被忽略的是:你以为改了路由文件就完了,其实 runtime/route/ 里躺着旧规则,而框架启动时优先加载它——连 debug 模式都不会报错,只是静默跳过新定义。


















