2016-08-16 7 views
1

URLでhttp://localhost/site/myAction?a[]=value1&a[]=value2私はアクションに配列を渡そうとしています。コントローラのアクションは、次のようになります。Yii2:コントローラのアクションにパラメータとして配列を渡すにはどうしたらいいですか?

class SiteController extends Controller { 
    public function actionMyAction($a) { 
     ... 
    } 
} 

私はエラーを取得する:

exception 'yii\base\InvalidParamException' with message 'Variable declaration not valid.'

実は、私は、文字列またはアクションへの文字列の配列を渡すことができるようにしたいと思います。単一の文字列は正常に動作しますが、配列は動作しません。どうすれば解決できますか?

答えて

3

文字列を渡すと、同じ宣言されたパラメータを持つ配列は見えません。これにより

class SiteController extends Controller { 
    public function actionMyAction(array $a) { // parameter must be an array now 
     ... 
    } 
} 

URL内の単一のパラメータは、URL内の配列にラップする必要があります。パラメータは、このように宣言する必要があり、配列を渡すには

代替は全くパラメータを宣言していないとYii::$app->request->get()で値をフェッチすることです:

class SiteController extends Controller { 
    public function actionMyAction() {  // no parameter anymore 
     $a = Yii::$app->request->get('a'); // $a can be an array or a string! 
              // or null if no argument was passed. 
    } 
} 

今、これらのURLが有効である:あなたが渡すことができますJSONエンコードデータを使用して

http://localhost/site/myAction?a[]=value1&a[]=value2 
http://localhost/site/myAction?a[]=value1 
http://localhost/site/myAction?a=value1 
http://localhost/site/myAction 
0
compareList=[{"model":"shine"},{"model":"yamaha-alba"}] 

複数の値。

+0

あなたは '$ .ajax()'を使用しますか?質問は、配列を受け入れるならコントローラの動作に関するものでした。データの送信方法ではありません。 – robsch

関連する問題