处理tp5升级到tp6时,url参数无法按顺序解析(url_param_type)
背景
原项目使用tp5多应用模式,未使用强制路由,且url参数是按照顺序解析url_param_type = 1
想尝试能不能从tp5升级到tp6,虽然有官方升级文档,但tp6的url参数方式只能按照名称成对解析,无法满足需求,于是看了下源码看看能不能处理
示例
tp5原模式
- 顺序参数模式(
config.php
文件中设置'url_param_type' => 1
) - 文件路径:
application/index/controller/TestController.php
public function test($a = '', $b = '') { echo '参数a:', $a, '<br/>'; echo '参数b:', $b, '<br/>'; }
- 执行
curl http://localhost/index/test/test/111/222
- 输出
参数a:111 参数b:222
tp6尝试
- 同样代码输出
参数a:222 参数b:
- 推荐方式:
curl http://localhost/index/test/test/a/111/b/222
- 或者其实:
curl http://localhost/index/test/test/fff/111/fff/222
也行,具体可以打印request()->param()
看看就知道了
分析
- 从上述结果可以看出只要解决param解析问题即可,tp6不定义路由时都是按照名称成对解析的
- 找到tp6解析的地方
think\route\dispatch\Url->parseUrl(string $url): array
解决
- 更改
parseUrl
方法可以处理,但对框架有影响,所以建议从项目内部替换Url类 - 可以直接引入我写的包
composer require aichenk/tp6-route-param
- 在
config/route.php
中添加参数'url_param_type' => 1
即可(0即为关闭) - tp6输出
参数a:111 参数b:222