2014-01-17 3 views
1

Я пытаюсь получить параметры из запроса PUT с использованием структуры Slim. Когда параметры синтаксического анализа формируют тело POST, я могу просто использовать $request->post('param') для получения значения в параметре. Однако, когда я использую $request->put('param'), я всегда получаю null.Не удается получить тело из запроса PUT с помощью Slim Framework

Мой PUT тело формируется так: param=value&otherparam=othervalue&foo=bar ...

P.S .: Я уже смотрел на this question, но ответ не использовал put() -метод.

+0

Пожалуйста, добавьте свой маршрут PUT и объясните, как вы делаете запрос PUT. Если это форма, пожалуйста, поделитесь формой. –

+0

Мой маршрут:/api/post /: id (например,/post/id/2). Я отправляю запрос через Fiddler в настоящее время, а затем через приложение для Android. –

ответ

5

Вы получаете null назад от $request->put('param'), потому что вы пытаетесь назвать это по маршруту POST. Вам нужно будет создать отдельный маршрут PUT (или использовать map и via), прежде чем вы сможете получить параметр PUT.

Кроме того, я не рекомендую добавлять HTTP-глагол к маршруту. Это приводит к некоторой действительно запутанной архитектуре.

Добавление дополнительного маршрута:

$app->post('/api/something/:id', function() {}); 
$app->put('/api/something/:id', function() {}); 

Использование Custom HTTP methods (map и via)

$app->map('/api/something/:id', function() {})->via('POST', 'PUT'); 

Пожалуйста, смотрите PUT routing documentation, и обратить особое внимание на раздел Метод Override.

UPDATE: Рабочий пример

Вот запрос примера PUT я взбитый:

$app->put('/test/:id', function ($id) use ($app) { 
    $name = $app->request->put('name'); 
    echo sprintf('PUT request for resource id %d, name "%s"', (int) $id, $name); 
}); 

Я звоню его с Curl из командной строки следующим образом:

curl -X PUT -d name=arthur http://slim-tutorial.dev/test/2 

Результаты:

PUT request for resource id 2, name "arthur"% 

Если у вас рабочее приложение Slim, и выше не работает для вас, вероятно, проблема находится где-то вне Slim, возможно, в том, как вы тестируете или опечатываете свой маршрут или параметры теста.

+0

«Сообщение» на маршруте совпадает с HTTP-глаголом. Это на самом деле «сообщение» на доске объявлений –

+0

На самом деле, я вызываю правильный маршрут с помощью PUT, и я проверял код до этого момента. '$ request-> is_Put()' возвращается true, поэтому моя единственная проблема заключается в получении параметра из тела –

+0

Ах, сообщение на доске объявлений. Понял! Таким образом, вы получаете PUT, но не получаете никаких параметров. См. Мой обновленный пример выше и попробуйте выполнить тестирование с завитом, как и я. –

Смежные вопросы