乐趣区

在yii2中,让你action参数支持POST数据的小方法

我们先来看一段代码
class RaController extends Controller {

public $enableCsrfValidation = false;

public function actionSay($username = ”,$city = ”){
echo “{$username} 来自 {$city}”;
}
}
这里 actionSay 对应的 url 为 index.php?r=ra/say,而 $username 和 $city 值的获取来自于 url 的参数,比如
index.php?r=ra/say&username=abei2017&city= 洛阳

总结 在 yii2 中,action 参数都是来自于 GET。
但是有的时候你可能需要让 action 的参数来自于 POST 请求,怎么办?
重载 runAction 即可,yii2 为控制器提供了 runAction 方法,它负责生成一个具体的 Action 对象并传递参数,我们可以通过复写它来实现,你可以看下 yii2 的生命周期来对其进行更好的了解。
那就开始干吧~,对上面的代码复写 runAction
class RaController extends Controller {

public $enableCsrfValidation = false;

public function runAction($id, $params = []){
$params = ArrayHelper::merge(Yii::$app->request->post(),$params);
return parent::runAction($id, $params);
}

public function actionSay($username = ”,$city = ”){
echo “{$username} 来自 {$city}”;
}
}
复写了 runAction 后,它将作用于此控制器的所有 action,当然你也可以通过 runAction 的 $id 来作用于某个 action。比如
public function runAction($id, $params = []){
if($id == ‘say’){
$params = ArrayHelper::merge(Yii::$app->request->post(),$params);
}

return parent::runAction($id, $params);
}
现在去试试吧,对 say 动作提交 POST 数据 username 和 city,成功接收。

退出移动版