Symfony中HTTP请求无法返回同键名多值查询参数问题求助
解决Symfony中同键名查询参数的数组解析问题
方法一:修改URL参数格式(推荐)
将URL中的同键参数改为带方括号的数组格式,把:
http://localhost/php-api/v1/examples/query?array=1&array=2&array=3&property=aa
修改为:
http://localhost/php-api/v1/examples/query?array[]=1&array[]=2&array[]=3&property=aa
此时直接调用$request->query->all()就能得到期望的结果:
Array ( [array] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [property] => aa )
这是因为PHP默认会将带[]的参数解析为数组,Symfony的Request组件遵循这一规则。
方法二:手动解析原始查询字符串(无需修改URL)
如果无法修改请求URL,可以直接从服务器环境变量中获取原始查询字符串,手动解析:
// 从$_SERVER获取原始查询字符串 $queryString = $_SERVER['QUERY_STRING']; // 解析字符串,保留同键参数为数组 parse_str($queryString, $queryParams, PHP_QUERY_RFC3986); // 输出结果 var_dump($queryParams);
执行后$queryParams会包含完整的数组参数:
Array ( [array] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [property] => aa )
原理说明
Symfony的Request组件底层依赖PHP的parse_str函数,而该函数默认行为是后面的同键参数覆盖前面的值,只有当参数名带[]时才会将值收集为数组。通过手动调用parse_str并传入原始查询字符串,可以绕过Symfony默认的解析逻辑,保留所有同键参数。
内容的提问来源于stack exchange,提问作者monaxi
相关产品推荐
相关产品推荐

