Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF2,将数组作为查询参数传递,esp在Zend\Http\Request中 问题:_Php_Zend Framework2 - Fatal编程技术网

Php ZF2,将数组作为查询参数传递,esp在Zend\Http\Request中 问题:

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(); //

任何人都知道一种方法可以诱使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();  // 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,这对一个巨大的方法来说是一个小小的改变,但我看不到任何更好的切入点。看起来不错,谢谢!