tp6路由配置文件默认不加载tp5的config/route.php,须移至app/route.php;注解路由需手动安装扩展并启用;route::rule()第三参数改为字符串模式,正则约束须用->pattern()方法。

路由配置文件直接失效:TP5的route.php在TP6里不加载
TP5把所有路由规则写在config/route.php里,TP6彻底废弃这个路径——框架启动时根本不会去读它,也不会报错,只是静默跳过。你改了几十条规则,访问404,第一反应往往是“路由没配对”,其实根源是文件放错了地方。
- TP6的路由定义默认在
app/route.php(单应用)或app/index/route.php(多应用模式下) - 如果项目沿用TP5结构,必须手动把
route.php从config/挪到app/目录,并确认app/route.php被自动引入(TP6默认启用RouteService,无需额外注册) - 旧版闭包路由写法
Route::get('user/:id', function($id){...})仍可用,但推荐改用控制器绑定:Route::get('user/:id', 'index/User/read'),否则无法享受中间件、验证器等新特性
注解路由不是默认开启:@route要手动装扩展+开启扫描
TP6文档里常提“支持注解路由”,但这是个可选功能,默认关闭。你在控制器方法上写了@route("api/user"),结果完全没生效,不是语法错,而是压根没启用解析器。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 先执行
composer require topthink/think-annotation - 在
config/app.php中打开注解扫描:'middleware' => ['think\middleware\Annotation'],(注意顺序,得放在其他中间件之前) - 注解路由只扫描
app/下带controller命名空间的类,默认不扫command或service目录 - TP5没有注解路由,所以升级时若保留旧注释(如
// @param int $id),不会冲突;但真要用@route,就得按TP6规范重写,比如@route("GET|POST api/user", ["cross"=>true])
Route::rule()参数行为变化:第三个参数从数组变成字符串
TP5里Route::rule('user/:id','index/user/read',['method'=>'GET'])这种写法,在TP6里会触发ArgumentCountError——因为TP6的rule()第三个参数已改为匹配模式字符串(如'GET|POST'),原数组参数被移到第四个位置。
- TP5写法:
Route::rule('user/:id', 'index/user/read', ['method'=>'GET']) - TP6正确写法:
Route::rule('user/:id', 'index/user/read', 'GET', ['https'=>false]) - 如果你用的是动态变量路由(如
:id\d+),TP5允许写在规则字符串里('user/:id\d+'),TP6要求统一用正则约束语法:Route::rule('user/:id', 'index/user/read')->pattern(['id'=>'\d+']) - 漏掉
->pattern()而直接在URL里写正则,会导致路由缓存编译失败,错误信息是preg_match(): Compilation failed
路由缓存和子目录自动扫描:性能提升但容易忽略环境差异
TP6默认开启路由缓存,首次访问慢一点,后续极快;但开发时若改了route.php却没清缓存,就会一直走旧规则——这不是bug,是设计使然。
- 开发阶段建议关掉缓存:
php think route:clear后,在.env里设APP_DEBUG=true,此时每次请求都会重新解析路由 - TP6支持子目录自动扫描(比如
app/api/v1/route.php),但前提是该目录被声明为应用模块(需think-multi-app扩展 +config/app.php中'app_multi' => true) - TP5没有子目录路由概念,所以升级后若把API路由拆到
app/api/下,却不装think-multi-app,这些路由将完全不可达
route.php还在老地方、以为注解天生可用、或者改完路由忘了清缓存——这些都不是报错型问题,是静默失效,得靠经验快速定位。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










