[英]ZF2, Passing arrays as query parameters, esp in Zend\Http\Request
任何人都知道一种哄骗Zend \\ Http \\ Request(或者可能是Zend \\ Stdlib \\ ParametersInterface的实现者)创建URL的方法,其中数组查询arg键不包含索引。
我试图使用Zend \\ Http \\ Request对象将值的数组作为GET请求上的查询参数传递。
...
$httpClient = new Zend\Http\Client(); // cURL adapter setup omitted
$request = new Zend\Http\Request(); // set url, set GET method omitted
$myQueryArgArray = [
'key0' => 'val0',
'key1' => ['val1', 'val2'],
];
$request->getQuery()->fromArray($myQueryArgArray);
$response = $httpClient->send($request);
...
cURL适配器使用以下网址发送请求到室外:
hostname/path?key0=val0&key1%5B0%5D=val1&key1%5B1%5D=val2
没有编码:
hostname/path/?key0=val0&key1[0]=val1&key1[1]=val2
但是,如果我不通过索引查询字符串我打电话外面的服务器出现故障。 也就是说,在进行URL编码之前,我可以使用如下网址来调用我的API端点:
hostname/path?key0=val0&key1[]=val1&key1[]=val2
任何人都知道一种哄骗Zend \\ Http \\ Request(或者可能是Zend \\ Stdlib \\ ParametersInterface的实现者)创建URL的方法,其中数组查询arg键不包含索引。
我试过将数组包装在Zend \\ Stdlib \\ ArrayObject中:
...
$myQueryArgArray = [
'key0' => 'val0',
'key1' => new \Zend\StdLib\ArrayObject(['val1', 'val2']),
];
...
las,无济于事。
我知道我是通过手动构造查询字符串并将其直接传递给Zend \\ Http \\ Request对象来实现该目标的,但是我正在寻找一种比创建自己的查询字符串更好的方法。
该页面似乎表明没有标准,因此我想ZF2和我的api端点都没有做到这一点:
如何在查询字符串中传递数组?
我查看了源代码,问题不是Zend \\ Http \\ Request类,而是Zend \\ Http \\ Client 。
查看第843行,您看到对http_build_query函数的调用。 在php.net网站上,您可以在注释中找到解决方案:
$query = http_build_query($query);
$query = preg_replace('/%5B[0-9]+%5D/simU', '%5B%5D', $query);
因此,最干净的解决方案可能是扩展Zend\\Http\\Client
类并重写send
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.