簡體   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