thinkphp6通过param、get等获取参数时多了一个url key解决方案

2022-05-24 13:10 栏目:技术开发 查看(4488)

把某个基于thinkphp5.0的项目迁移到thinkphp6,发现很多后台提交环节都报错了,原因在于进行提交的时候后台接收到的参数多出了一个url key,而一些简单的操作直接把收到的字段更新到数据表,就很可能报数据表字段不存在。

微信图片_20220524125440

对于post操作,我们可以通过获取post数据,就没有这个参数。但是如果通过param、get等方式获取参数(实际上很多场景需要用到),就会多了上面那个参数。在不不过多修改源代码的前提下如何快速过滤掉这个参数呢?下面提供两种方式:

1、修改伪静态配置文件

以apache为例,我们可以发现thinkphp5.0和thinkphp6的伪静态配置文件.htaccess有一点不一样,就是在最后一行不一样。thinkphp5.0的默认.htaccess内容如下:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>

而thinkphp6的默认.htaccess内容如下:

<IfModule mod_rewrite.c>
 Options +FollowSymlinks -Multiviews
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

如果实测可以知道,只要把老版本默认的.htaccess最后一行覆盖thinkphp6默认的.htaccess的最后一行即可,也就是

RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]

改成

RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

即可。

2、直接在应用中进行参数过滤

除了修改伪静态配置文件,我们还可以通过手写业务逻辑代码快速过滤掉对应多余的key参数。由于这个老项目获取项目是使用input助手函数,下面我们就以input助手函数过滤为例。我们可以在app\Resquest.php添加如下代码:

public function input(array $data = [], $name = '', $default = null, $filter = ''){
   $data = parent::input($data,$name,$default,$filter);
   if(is_array($data)){
      reset($data);
      $firstKey = key($data);
      if(substr_count($firstKey, '/')>0){ 
          array_shift($data);
      }
      return $data;
   }
   return $data;
}

当然也可以通过get、post、param等方式进行过滤,对应的代码,可以参考vendor\topthink\framework\src\think\Request.php文件中对应方法,进行重写来进行过滤;这个类文件是tp框架关于请求相关的核心类。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:thinkphp6通过param、get等获取参数时多了一个url key解决方案 - 微构网络
分享: