繁体   English   中英

ZF2,将数组作为查询参数传递,尤其是在Zend \\ Http \\ Request中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM