Yii2框架如何重写POST或者GET参数?

已邀请:

zkbhj - 凯冰科技站长

赞同来自:

通常你直接修改POST数组后,重新用Yii::$app->request->post()取出的数据都是旧的。所以这种情况下你就应该意识到:Yii是提前装载了POST数据了!
 
//假设原本 $_POST['name'] 的值是 Marie

public function actionTest(){
$_POST['name'] = 'Jay';
return Yii::$app->request->post('name');
}
结果只会得到旧的值“Marie”  而不是“Jay”。 
正确姿势:
public function actionTest(){
$mockPost = [
'name' => 'Jay'
];
Yii::$app->request->setBodyParams($mockPost); //会整个原来的POST都被覆盖
echo Yii::$app->request->post('name'); //Jay

//单独覆盖其中一个
$post = Yii::$app->request->post(); //要先整个POST数组取出
$post['name'] = 'Jay2'; //修改指定的值
Yii::$app->request->setBodyParams($post); //然后整个设回去,这样其它POST数组就不会被抹掉了
echo Yii::$app->request->post('name'); //Jay2
}
模拟GET

模拟GET参数的思路和POST一模一样,只是操作的方法名称不一样。在要修改的GET参数数组时,将setBodyParams这个方法换成setQueryParams即可。

要回复问题请先登录注册