必须重写全部路由定义——TP5废除模块级路由和正则嵌入语法,统一通过route/route.php用Route::get()等方法注册,且开启url_route_must后未定义路由(含首页)将直接404。

要让ThinkPHP3.2项目升级到5.x后路由能正常访问,必须重写全部路由定义——因为TP5废除了模块级路由、正则路由和普通URL模式支持,所有规则必须基于根路径重新声明。
路由注册位置和方式完全不同
TP3.2的路由定义写在模块配置文件里,比如Application/Home/Conf/config.php中用'URL_ROUTER_ON' => true开启,再通过'routes' => []数组定义;TP5则统一收口到route/route.php文件,且必须用\think\Route::get()等静态方法注册。
TP3.2允许直接在URL中写/Home/Index/index跳转到控制器,TP5默认关闭该能力,【url_route_must'=>true时未定义路由会直接报错404】。
URL解析逻辑彻底重构
TP3.2路由本质是字符串替换:把/new/:id匹配成/Home/News/read/id/:id,路径里必须带模块名;TP5路由从/开始定义,不带模块前缀,Route::get('new/:id','News/read')实际映射到app\controller\News->read(),模块名由命名空间自动推导。
立即学习“PHP免费学习笔记(深入)”;
TP3.2支持id/\d+这类正则写法直接嵌入路由字符串;TP5废弃该语法,改用变量规则单独配置:Route::pattern(['id'=>'\d+']),否则:id会被当作普通字符串处理。
请求类型约束写法差异
方法一:TP3.2在路由数组中用'method'=>'post'键值对限定:
'POST new/:id' => 'Home/News/update',
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
方法二:TP5必须显式调用对应方法:
\think\Route::post('new/:id','News/update');
TP5不支持在单条规则里混用GET/POST,【同一路径不同请求类型必须拆成两条独立注册语句】,否则POST请求会命中GET规则导致逻辑错乱。
强制路由模式下的行为对比
第一步:TP3.2开启'URL_ROUTER_ON'=>true后,未匹配路由自动回落到PATHINFO解析,仍可访问/index.php?s=/Home/Index/index;
第二步:TP5开启'url_route_on'=>true但未设url_route_must时,同样允许PATHINFO回退;
第三步:一旦设置'url_route_must'=>true,所有URL必须有对应路由规则,连/首页都需显式写Route::get('/','Index/index'),否则直接抛出RouteNotFoundException异常。
这一步最容易踩坑:TP3.2开发者习惯留空首页路由,TP5里必须补上,否则部署后首页打不开。


















