Я думаю, что я прочитал каждый ответ там относительно проблем с получением тела запроса PUT на Slim Framework (работает на Windows XAMPP). Кажется, ни одно из решений не работает для меня, поэтому, возможно, есть еще одна оговорка, которую я пропускаю.
Мой PHP-код выглядит следующим образом:
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
$app->run();
$app->put('/calendar/update/:id', function($id) use ($app){
$ev = json_decode($app->request()->getBody());
echo var_dump($ev); // NULL
}
Я тестировал его в тестере REST в PHPStorm, используя параметры и строку запроса — безрезультатно. Я пытался установить contentType: application/x-www-form-urlencoded
явно в моем вызове AJAX, а также.
Кажется, заблудился здесь …
Была похожая проблема. Если вы используете форму для отправки запроса. Добавьте это скрытое поле в вашу форму. Также не забудьте переместить $ app-run (); до последней строки.
<input type="hidden" name="_METHOD" value="PUT"/>
$app->contentType()
Метод влияет только на HTTP-ответ, отправленный Slim обратно HTTP-клиенту. Я полагаю, что Мика предлагает изменить HTTP-запрос Content-Type
заголовок к application/json
если вы собираетесь анализировать тело запроса, как показано в примере выше.
Кроме того, вы должны только вызвать $app->run()
ПОСЛЕ того, как вы определите свои маршруты. Ваш пример выше вызывает $app->run()
перед вашими маршрутами.
Надеюсь это поможет!
-мистифицировать