处理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
    
posted @ 2021-07-13 23:45  aiChenK  阅读(526)  评论(0编辑  收藏  举报