Yii2:如何将数组作为参数传递给控制器​​动作?

时间:2016-08-16 09:16:39

标签: arrays url parameters controller yii2

使用网址http://localhost/site/myAction?a[]=value1&a[]=value2我尝试将数组传递给某个操作。控制器操作如下所示:

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

我收到错误:

  

例外' yii \ base \ InvalidParamException'带有消息'变量   声明无效。'

实际上,我希望能够将字符串或字符串数​​组传递给操作。单个字符串工作正常但不是数组。我该如何解决?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

compareList=[{"model":"shine"},{"model":"yamaha-alba"}]

使用json编码数据可以传递多个值。