Я использую тонкий PHP-фреймворк для разработки REST API. Я успешен в реализации запросов POST и GET. Я также использую промежуточное ПО ContentTypes для анализа тела JSON в запросах POST и PUT, однако мой запрос PUT всегда выдает пустую строку на сервере. POST просто отлично работает, и я могу получить разобранный JSON как ассоциативный массив PHP, но не могу получить его в запросе PUT. Я использую application / json в заголовках и не хочу использовать метод application / x-www-form-urlencoded.
$app->map('/example/:id', function ($id) use($app, $log) {
//$body = $app->request()->getBody();
//using the above in other POST calls & it works but does not in this case
$body = json_decode($app->request()->getBody()); //tried this. no success
var_dump($body);
} )->via ( 'PUT', 'PATCH' );
Я звоню через CURL вот так
$headers = array(
'Content-Type'=>'application/json;charset=utf-8',
);
$id = 123;
$body = array("name"=>"myfirstname","email"=>"myemail");
$json_str = json_encode($body);
$response = Requests::put($base_url.'/api/v1/example/'.$id,$headers,$json_str);
Когда я пытаюсь вернуть тот же JSON из API, он возвращает пустой массив. Я попытался POSTMAN на хром и выше кода, но не работает. В чем проблема.
Обновление: я убедился, что тот же код работает на локальном хосте, но не работает на удаленном сервере разработки. В чем может быть причина? Нужно ли изменять какие-либо настройки на сервере?
Слим читает php://input
чтобы получить содержимое тела запроса, так что, какова бы ни была проблема, это связано с особенностями этого потока.
У вас есть другой код, который пытается прочитать php://input
? Если это так, обратите внимание, что это возможно только начиная с PHP 5.6 (что может быть на вашем локальном компьютере, когда на вашем сервере его нет).
Попробуйте использовать getInstance ().
$body = json_decode($app->getInstance()->request()->getBody());