Я использую Zend_Http_Client для отправки набора данных на мой сервер с PHP. Однако сервер ожидает данные в виде myField[]
, т. Е. У меня есть набор флажков, и пользователь может установить более одного. Мой текущий код:
foreach ($myValues as $value) {
$this->client->setParameterPost('myField[]', $value);
}
Однако, похоже, что Zend_Http_Client просто перезаписывает myField[]
новым значением каждый раз, когда проходит цикл. Как добавить несколько полей POST для с одинаковым именем с помощью Zend_Http_Client?
UPDATE
Я действительно нашел способ сделать это, взломав сам код 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 без внесения изменений в код библиотеки, но пока это работает. Буду очень признателен за любые предложения о том, как это сделать без взлома библиотек.