我正在使用 Zend_Http_Client 将一组数据发布到运行 PHP 的服务器。但是,服务器期待表单中的数据myField[]
,即我有一组复选框,用户可以检查多个。我目前的代码是:
foreach ($myValues as $value) {
$this->client->setParameterPost('myField[]', $value);
}
然而,似乎 Zend_Http_Client每次通过循环时只是简单地用新值覆盖。 myField[]
如何使用 Zend_Http_Client添加多个同名的 POST 字段?
更新
通过破解 Zend_Http_Client 代码本身,我实际上已经找到了一种方法来做到这一点。然而这并不理想。我是这样做的:
首先,我只是将值添加到 POST 字段中,如下所示:
$myValues = array(0,1,2);
$this->client->setParameterPost('myField', $myValues);
在函数_prepareBody()
中,Zend_Http_Client 使用以下代码构建 POST 数据:
$body = http_build_query($this->paramsPost, '', '&');
如果您查看它构建的 POST 数据,它看起来像这样:
myField[0]=0&myField[1]=1&myField[2]=2
当然,它是 url 编码的,所以它看起来像这样:
myField%5B0%5D=0&myField%5B1%5D=1&myField%5B2%D=2
所以,我只是添加了一个preg_replace
来制作 [0] -> []、[1] -> [] 等:
$body = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '%5B%5D=', $body);
我宁愿只使用 Zend_Http_Client 而不对库代码进行更改,但这目前有效。对于如何在不破解库的情况下进行操作的任何建议,我将不胜感激。