0
点赞
收藏
分享

微信扫一扫

处理tp5升级到tp6时,url参数无法按顺序解析(url_param_type)

以沫的窝 2022-03-22 阅读 34


背景

原项目使用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



举报

相关推荐

0 条评论