掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流
把某個(gè)基于thinkphp5.0的項(xiàng)目遷移到thinkphp6,發(fā)現(xiàn)很多后臺(tái)提交環(huán)節(jié)都報(bào)錯(cuò)了,原因在于進(jìn)行提交的時(shí)候后臺(tái)接收到的參數(shù)多出了一個(gè)url key,而一些簡(jiǎn)單的操作直接把收到的字段更新到數(shù)據(jù)表,就很可能報(bào)數(shù)據(jù)表字段不存在。
對(duì)于post操作,我們可以通過(guò)獲取post數(shù)據(jù),就沒(méi)有這個(gè)參數(shù)。但是如果通過(guò)param、get等方式獲取參數(shù)(實(shí)際上很多場(chǎng)景需要用到),就會(huì)多了上面那個(gè)參數(shù)。在不不過(guò)多修改源代碼的前提下如何快速過(guò)濾掉這個(gè)參數(shù)呢?下面提供兩種方式:
1、修改偽靜態(tài)配置文件
以apache為例,我們可以發(fā)現(xiàn)thinkphp5.0和thinkphp6的偽靜態(tài)配置文件.htaccess有一點(diǎn)不一樣,就是在最后一行不一樣。thinkphp5.0的默認(rèn).htaccess內(nèi)容如下:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] </IfModule>
而thinkphp6的默認(rèn).htaccess內(nèi)容如下:
<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>
如果實(shí)測(cè)可以知道,只要把老版本默認(rèn)的.htaccess最后一行覆蓋thinkphp6默認(rèn)的.htaccess的最后一行即可,也就是
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
改成
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
即可。
2、直接在應(yīng)用中進(jìn)行參數(shù)過(guò)濾
除了修改偽靜態(tài)配置文件,我們還可以通過(guò)手寫(xiě)業(yè)務(wù)邏輯代碼快速過(guò)濾掉對(duì)應(yīng)多余的key參數(shù)。由于這個(gè)老項(xiàng)目獲取項(xiàng)目是使用input助手函數(shù),下面我們就以input助手函數(shù)過(guò)濾為例。我們可以在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; }
當(dāng)然也可以通過(guò)get、post、param等方式進(jìn)行過(guò)濾,對(duì)應(yīng)的代碼,可以參考vendor\topthink\framework\src\think\Request.php文件中對(duì)應(yīng)方法,進(jìn)行重寫(xiě)來(lái)進(jìn)行過(guò)濾;這個(gè)類(lèi)文件是tp框架關(guān)于請(qǐng)求相關(guān)的核心類(lèi)。
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流