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

Arrays Yii2:如何将数组作为参数传递给控制器操作?,arrays,url,parameters,controller,yii2,Arrays,Url,Parameters,Controller,Yii2,使用URLhttp://localhost/site/myAction?a[]=value1&a[]=value2我正在尝试将数组传递给操作。控制器操作如下所示: class SiteController extends Controller { public function actionMyAction($a) { ... } } 我得到一个错误: 异常“yii\base\InvalidParamException”和消息“Variable” 声明无效。”

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

class SiteController extends Controller {
    public function actionMyAction($a) {
        ...
    }
}
我得到一个错误:

异常“yii\base\InvalidParamException”和消息“Variable” 声明无效。”

实际上,我希望能够将字符串或字符串数组传递给操作。单个字符串可以正常工作,但数组不行。如何解决这个问题?

传递一个字符串和一个具有相同声明参数的数组是不可能的。要传递数组,必须按以下方式声明参数:

class SiteController extends Controller {
    public function actionMyAction(array $a) { // parameter must be an array now
        ...
    }
}
这样,URL中的单个参数需要包装到URL中的数组中

另一种方法是完全不声明任何参数,并使用以下命令获取值:

现在这些URL是有效的:

http://localhost/site/myAction?a[]=value1&a[]=value2
http://localhost/site/myAction?a[]=值1
http://localhost/site/myAction?a=value1
http://localhost/site/myAction
使用json编码数据,您可以传递多个值。

您的意思是使用
$.ajax()
?问题是关于控制器操作的-如果它接受数组。而不是如何发送数据。
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.
    }
}
compareList=[{"model":"shine"},{"model":"yamaha-alba"}]