Symfony - HTTP请求不返回具有相同密钥的参数

kgsdhlau  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(136)

在我的Symfony项目中,我请求了一个带有查询参数的URL,一个是通过相同键值的数组添加的,另一个是返回给我的字符串类型:

http://localhost/php-api/v1/examples/query?array=1&array=2&array=3&property=aa

我指的是DOCS,但仍然没有得到我正在寻找的解决方案。无论如何,数组键总是只返回最后一个:

$request->query->all();

得到我:

Array
(
    [array] => 3
    [property] => aa
)

我也尝试了Request类中的其他方法,但没有一个能让它返回所有的查询参数。
有人知道怎么解决这个问题吗?
我想要的输出:

{
"array": [
    "1",
    "2",
    "3"
  ],
  "property": "aa"
}
6za6bjd0

6za6bjd01#

你必须从服务器变量中获取QUERY_STRING。这有原始参数。
解决方案可能如下所示:

$params = [];
$queryString = $request->server->get('QUERY_STRING');
$paramsQueryString = explode('&', $queryString);
foreach ($paramsQueryString as $paramQueryString) {
    list($key, $value) = explode("=", $paramQueryString);
    if (!isset($params[$key])) {
        $params[$key] = [];
    }
    $params[$key][] = $value;
}

// Which key has only one element? Then remove the array.
foreach ($params as $key => $value) {
    if (count($value) === 1) {
        unset($params[$key]);
        $params[$key] = $value[0];
    }
}

$params

Array
(
    [array] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [property] => aa
)

相关问题