2016-08-16 2 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. 
    } 
} 

Теперь эти адреса являются действительными:

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

Смежные вопросы