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