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

咱们先来看一段代码php

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的参数,好比html

index.php?r=ra/say&username=abei2017&city=洛阳

总结 在yii2中,action参数都是来自于GET。yii2

可是有的时候你可能须要让action的参数来自于POST请求,怎么办?app

重载runAction便可,yii2为控制器提供了runAction方法,它负责生成一个具体的Action对象并传递参数,咱们能够经过复写它来实现,你能够看下yii2的生命周期来对其进行更好的了解。yii

那就开始干吧~,对上面的代码复写runActionide

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。好比post

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,成功接收。url

相关文章
相关标签/搜索