在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

相關文章
相關標籤/搜索