Вы получаете 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, возможно, в том, как вы тестируете или опечатываете свой маршрут или параметры теста.
Пожалуйста, добавьте свой маршрут PUT и объясните, как вы делаете запрос PUT. Если это форма, пожалуйста, поделитесь формой. –
Мой маршрут:/api/post /: id (например,/post/id/2). Я отправляю запрос через Fiddler в настоящее время, а затем через приложение для Android. –