如何将yii2 queryString转换为queryParams

问题描述 投票:0回答:1

我想将yii2查询参数传递给api。我的js代码类似于

function doInBackground(){
      var params=<?=\Yii::$app->request->getQueryString()?>;
       $.get('car/get-map-data',
          {
           "params":params
      },
      function(data){
        if(data)
        {
          console.log(data);
        }
      }); 
    }

而且我正在服务器中以字符串形式获取此搜索参数

"CarSearch%5Bcity_id%5D=&CarSearch%5Bmotor_category%5D=9&drp-make%5B%5D=3&CarSearch%5Bdrp_make%5D=%2C3&CarSearch%5Bdrp_model%5D=&CarSearch%5Bmakes%5D=%22%2C3%22&CarSearch%5Bmodels%5D=&CarSearch%5Bprice_start%5D=&CarSearch%5Bprice_end%5D=&CarSearch%5Byear_start%5D=&CarSearch%5Byear_end%5D=&CarSearch%5Bkm_start%5D=&CarSearch%5Bkm_end%5D=&CarSearch%5Buser_location%5D=&CarSearch%5Blat%5D=0.0&CarSearch%5Blong%5D=0.0&CarSearch%5Bradius%5D=1000000000&CarSearch%5Btitle%5D="

我的控制器动作是

$params=Yii::$app->request->queryParams;
$dataProvider=$searchModel->search($params);

但是我希望上面的参数字符串以params数组的格式加载以进行搜索。我该怎么做

php search parameters yii2
1个回答
0
投票

首先,您应该在<?=\Yii::$app->request->getQueryString()?>;周围加上引号,因为您不是返回对象而是字符串,但是所需的内容有所不同。

您应该使用Yii::$app->request->queryParams并将其首先转换为json对象

params = <?=\yii\helpers\Json::encode(Yii::$app->request->queryParams);?>

并且只传递该变量而没有任何外部括号,如

$.get('car/get-map-data',params,
  function(data){
    if(data)
    {
      console.log(data);
    }
});

这将发送请求,如

http://youdomain/car/get-map-data?param1=value1&param2=value2

您的完整代码应类似于

function doInBackground() {
    var params = <?=\yii\helpers\Json::encode(Yii::$app->request->queryParams);?>;
    $.get('car/get-map-data', params,
        function (data) {
            if (data) {
                console.log(data);
            }
        }
    );
}
© www.soinside.com 2019 - 2024. All rights reserved.