Почему Zend Framework 2 использует application / x-www-form-urlencoded для запроса пут?

Почему я должен использовать x-www-form-urlencoded вариант, когда я пытаюсь проверить метод PUT в Zend Framework 2 на Почтальоне?

/*
Use multipart/form-data for testing.
*/
public function create($data)
{
$form = new AlbumForm();
$album = new Album();
$form->setInputFilter($album->getInputFilter());
$form->setData($data);
if ($form->isValid()) {
$album->exchangeArray($form->getData());
$id = $this->getAlbumTable()->saveAlbum($album);
}

return new JsonModel(array(
'data' => $album->extract(),
));
}

/*
Use application/x-www-form-urlencoded for testing.
*/
public function update($id, $data)
{
$data['id'] = $id;
$album = $this->getAlbumTable()->getAlbum($id);
$form  = new AlbumForm();
$form->bind($album);
$form->setInputFilter($album->getInputFilter());
$form->setData($data);
if ($form->isValid()) {
$id = $this->getAlbumTable()->saveAlbum($form->getData());
}

return new JsonModel(array(
'data' => $album->extract(),
));
}

Я получу этот результат, если я получил за form-data вариант,

Array
(
[------WebKitFormBoundaryP9erwzQtIaB0m0tr
Content-Disposition:_form-data;_name] => "title"
bla bla bla bla xxx
------WebKitFormBoundaryP9erwzQtIaB0m0tr
Content-Disposition: form-data; name="artist"
xxx xxx
------WebKitFormBoundaryP9erwzQtIaB0m0tr--

)

Я не понимаю, почему Zend2 ожидает этого. Есть идеи? Какие преимущества использования x-www-form-urlencoded над form-data — в контексте Zend2 тогда?

Могу ли я настроить, что где-то в Zend2 использовать form-data вариант для метода PUT?

1

Решение

Проблема в том, что данные формы плохо работают в PHP с запросами PUT. Это не имеет ничего общего с ZF2, это также относится к Symfony2 или Slim, например. Для запросов POST это не проблема, потому что в PHP есть внутреннее оборудование, которое анализирует данные и предоставляет их в $_POST,

Дело в том, что синтаксический анализ данных формы не является тривиальным. Основная часть границ и разбиение нескольких ключей / значений легко. С двоичными данными становится все труднее, особенно со всеми существующими граничными условиями. Не говоря уже о невероятно больших телах, где вы предпочитаете анализ на основе потока, а не загрузку всей строки в память.

Итак, попробуйте использовать urlencoded тела или написать свой собственный анализатор данных формы. Это, к сожалению, единственные два варианта.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]