TP6.0中Route::get()等快捷方法可用但行为已变:资源路由需显式写完整命名空间,闭包路由不再自动绑定参数,必须用$request->param()获取,且路由缓存需手动清除。

Route::get() 这类快捷方法在 TP6.0 中依然可用,但底层路由注册机制、参数解析逻辑和默认行为已变化。直接复制 5.1 的路由代码到 6.0,大概率出现「匹配失败」「参数取不到」「中间件不生效」等问题。
Route::resource() 资源路由的命名空间与控制器路径必须显式声明
TP5.1 允许 Route::resource('users', 'UserController') 自动推导命名空间(如 appcontrollerUserController);TP6.0 默认关闭自动推导,且控制器必须带完整命名空间。
- 错误写法:
Route::resource('users', 'UserController')→ 找不到类,报Class 'appcontrollerUserController' not found - 正确写法:
Route::resource('users', 'app\controller\UserController')(注意双反斜杠转义) - 若使用多应用模式(如
admin应用),需写成Route::resource('users', 'app\admin\controller\UserController') - TP6.0 不再支持 5.1 的
controller_layer配置自动拼接控制器层名,所有控制器路径必须字面量写死或通过闭包动态构造
分组路由中嵌套资源路由时,prefix 和 namespace 必须分开配置
TP5.1 可以用 Route::group(['prefix' => 'api', 'namespace' => 'api'], function () { ... }) 一键设置前缀和命名空间;TP6.0 拆分为两个独立参数,且顺序敏感。
-
namespace只影响控制器类名解析,不影响 URL 路径;prefix只影响 URL 路径,不影响类加载 - 正确写法:
Route::group(['prefix' => 'api'], function () { Route::resource('posts', 'app\api\controller\PostController'); })->namespace('app\api\controller'); - 常见错误:把
namespace放在闭包外却漏掉prefix,导致路由注册进根命名空间,但访问时 URL 带/api/→ 404 - 验证方式:运行
php think route:list,检查输出中Controller列是否为完整类名,Rule列是否含预期前缀
闭包路由中的 $request 参数类型变了,不能直接解构
TP5.1 的闭包路由可直接写 Route::get('hello', function ($name) { return 'Hello '.$name; });,框架自动从 URL 提取参数;TP6.0 闭包只接收 thinkRequest 实例,不再做隐式参数绑定。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 错误写法:
Route::get('user/:id', function ($id) { ... })→$id永远为 null - 正确写法:
Route::get('user/:id', function (thinkRequest $request) { $id = $request->param('id'); ... }) - 若需兼容旧习惯,可改用控制器方法路由:
Route::get('user/:id', 'User/read'),此时read()方法签名仍支持public function read($id) - 注意:TP6.0 的
$request->param()默认合并 GET/POST/ROUTE 参数,而 5.1 的input()默认只读 GET,迁移时要确认参数来源是否一致
路由缓存生成后,修改路由文件不自动刷新
TP6.0 的路由缓存是静态 PHP 文件(runtime/route.php),不像 5.1 那样依赖配置开关动态判断。开发阶段容易误以为改了路由就生效,实际还在跑旧缓存。
立即学习“PHP免费学习笔记(深入)”;
- 每次修改
route/app.php后,必须手动清缓存:php think route:clear - 若启用了
APP_DEBUG = true,TP6.0 默认禁用路由缓存,但某些部署脚本会强制开启,务必检查config/app.php中的'route_cache' => false - CI/CD 流程中,不要遗漏
route:clear步骤,否则上线后路由 404 却查不到原因 - 调试技巧:临时注释掉
route_cache配置,看是否恢复正常——若恢复,说明缓存未更新,而非路由写错
php think route:list 输出里的 Controller 字段——它不显示命名空间就等于没注册成功,别只盯着 URL 规则看。


















