Php ZF2,将数组作为查询参数传递,esp在Zend\Http\Request中 问题:
任何人都知道一种方法可以诱使Zend\Http\请求(或者可能是Zend\Stdlib\ParametersInterface的实现者)创建URL,其中数组查询arg键不包含索引 背景: 我试图使用Zend\Http\request对象在GET请求上传递一个值数组作为查询参数Php ZF2,将数组作为查询参数传递,esp在Zend\Http\Request中 问题:,php,zend-framework2,Php,Zend Framework2,任何人都知道一种方法可以诱使Zend\Http\请求(或者可能是Zend\Stdlib\ParametersInterface的实现者)创建URL,其中数组查询arg键不包含索引 背景: 我试图使用Zend\Http\request对象在GET请求上传递一个值数组作为查询参数 ... $httpClient = new Zend\Http\Client(); // cURL adapter setup omitted $request = new Zend\Http\Request(); //
...
$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适配器正在使用如下url发送请求:
hostname/path?key0=val0&key1%5B0%5D=val1&key1%5B1%5D=val2
没有编码:
hostname/path/?key0=val0&key1[0]=val1&key1[1]=val2
但是,我调用的服务器会失败,除非我不在查询字符串中传递索引。也就是说,在URL编码之前,我可以使用如下URL调用API端点:
hostname/path?key0=val0&key1[]=val1&key1[]=val2
问题(再次:):
任何人都知道一种方法可以诱使Zend\Http\请求(或者可能是Zend\Stdlib\ParametersInterface的实现者)创建URL,其中数组查询arg键不包含索引
我所尝试的:
我已尝试将数组包装到Zend\Stdlib\ArrayObject中:
...
$myQueryArgArray = [
'key0' => 'val0',
'key1' => new \Zend\StdLib\ArrayObject(['val1', 'val2']),
];
...
唉,没有用
我知道我通过手动构造查询字符串并将其直接传递给Zend\Http\Request对象来实现这一目标,但我正在寻找一种比创建自己的查询字符串更好的方法
这个页面似乎表明没有标准,所以我认为ZF2和我的api端点都没有做错:我已经查看了源代码,问题不在于类,而是源代码 看看你看到的函数调用。在php.net网站上,您的评论中有一个解决方案:
$query = http_build_query($query);
$query = preg_replace('/%5B[0-9]+%5D/simU', '%5B%5D', $query);
因此,最干净的解决方案可能是扩展
Zend\Http\Client
类并覆盖send
方法。Bleh,这对一个巨大的方法来说是一个小小的改变,但我看不到任何更好的切入点。看起来不错,谢谢!