Почему я должен использовать параметр x-www-form-urlencoded
когда я пытаюсь проверить метод PUT в Zend Framework 2 на Postman?
/*
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?
Проблема в том, что данные формы не работают хорошо в PHP с запросами PUT. Это не имеет никакого отношения к ZF2, это также относится к Symfony2 или Slim, например. Для запросов POST это не проблема, потому что PHP имеет внутренности, анализируя данные для вас и предоставляя их в $_POST
.
Дело здесь в том, что разбор формальных данных не является тривиальным. Основная часть границ и разделение множественных ключей/значений легко. Это становится сложнее с двоичными данными и особенно всеми краевыми условиями, которые существуют. Не говоря о невероятно больших телах, где вы предпочитаете синтаксический анализ, основанный на потоке, чем загрузку всей строки в памяти.
Итак, попробуйте использовать urlencoded тела или напишите свой собственный синтаксический анализатор форм. К сожалению, это только два варианта.
try using urlencoded bodies, or write your own form-data parser.
любые примеры и руководства, с которых я могу начать?