Вы получаете null
обратно от $request->put('param')
, потому что пытаетесь вызвать его по маршруту POST
. Вам нужно будет создать отдельный маршрут PUT
(или использовать map
и via
), прежде чем вы сможете получить параметр PUT
.
Кроме того, я не рекомендую добавлять в маршрут команду HTTP. Это приводит к некоторой действительно запутанной архитектуре.
Добавление дополнительного маршрута:
$app->post('/api/something/:id', function () {});
$app->put('/api/something/:id', function () {});
Использование Пользовательских методов HTTP (map
и via
)
$app->map('/api/something/:id', function () {})->via('POST', 'PUT');
См. PUT
документацию по маршрутизации и уделите особое внимание разделу "Переопределение метода".
ОБНОВЛЕНИЕ: рабочий пример
Вот пример запроса 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, возможно, в том, как вы тестируете, или в опечатке в вашем маршруте или параметрах теста.
person
Jeremy Kendall
schedule
18.01.2014