2016-08-16 3 views
1

URL이 http://localhost/site/myAction?a[]=value1&a[]=value2 인 경우 작업에 배열을 전달하려고합니다. 컨트롤러의 동작은 다음과 같습니다Yii2 : 배열을 매개 변수로 컨트롤러 작업에 전달할 수 있습니까?

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

사실, 난 문자열이나 행동에 문자열 배열을 통과 할 수 있도록하고 싶습니다 :

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

나는 오류가 발생합니다. 단일 문자열은 잘 작동하지만 배열은 작동하지 않습니다. 어떻게 해결할 수 있습니까?

답변

3

문자열을 과 같이 전달하면 동일한 선언 된 매개 변수가있는 배열을 사용할 수 없습니다. URL에 하나의 매개 변수는 URL 내에서 배열로 포장해야이와

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

: 매개 변수가이 방법을 선언하는 배열을 전달합니다.

대안은 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은 유효합니다

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"}] 

는 JSON 인코딩 데이터는 통과 할 수 사용 다중 가치.

+0

'$ .ajax()'를 사용 하시겠습니까? 배열을 받아들이면 질문은 컨트롤러 동작에 관한 것입니다. 데이터를 보내는 방법이 아닙니다. – robsch

관련 문제