常见误区 - 企图修改POST数组模拟数据 ¶
作者:KK
发表日期:2016.09.07
更新日期:2016.11.10
在末尾补充了模拟GET参数的内容
问题 ¶
通常你直接修改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
即可