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

1

Почему я должен использовать параметр 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?

Теги:
postman
zend-framework
zend-framework2

1 ответ

2
Лучший ответ

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

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

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

  • 0
    try using urlencoded bodies, or write your own form-data parser. любые примеры и руководства, с которых я могу начать?
  • 1
    Очень маленький пример, не включающий в себя все возможные результаты, можно найти здесь: chlab.ch/blog/archives/php/manually-parse-raw-http-data-php Еще один более сложный пример - отклоненный PR в Symfony, со всеми обсуждениями. о том, почему это не такая хорошая идея: github.com/symfony/symfony/pull/10381#issuecomment-38717986

Ещё вопросы

Сообщество Overcoder
Наверх
Меню