Запрос PUT с типом содержимого json

у меня есть switch основанный на $_SERVER['REQUEST_METHOD'] и что-то идет не так в PUT дело.
Правдоподобный способ чтения PUT это использовать php://input и читать это с fopen или же file_get_contents,

Данные, которые отправляются в PUT, имеют Content-type: application/json

В настоящее время у меня есть такой случай:

case "PUT":
parse_str(file_get_contents("php://input"), $putData);
var_dump($putData);
if(isset($_GET['id'])){
putData($_GET['id'], $putData);
} else {
print json_encode(["message" => "Missing parameter `id`."]);
http_response_code(400);
}
break;

Самое замечательное, что мой cURL-запрос с парами ключ / значение работает отлично. Данные заполняются, и мой putData() справляется все просто отлично.
проблема это то, что мне нужно принять JSON в этом случае, как мне поступить?
Мой клиент REST выбрасывает пустой массив, когда я var_dump($putData),

0

Решение

Попробуйте использовать json_decode вместо parse_str

case "PUT":
$rawInput = file_get_contents("php://input");
$putData = json_decode($rawInput);
if (is_null($putData)) {
http_response_code(400);
print json_encode(["message" => "Couldn't decode submission", "invalid_json_input" => $rawInput]);
} else {
if(isset($_GET['id'])){
putData($_GET['id'], $putData);
} else {
http_response_code(400);
print json_encode(["message" => "Missing parameter `id`."]);
}
}
break;
2

Другие решения

Просто угадайте здесь, но если ваш REST-клиент принимает JSON для этого запроса, он захлебнется var_dump() которая выводит строку, не являющуюся JSON, прямо на ответ. Попробуйте удалить var_dump()

Кроме того, я уверен, что ты должен позвонить http_response_code() прежде чем любой вывод будет отправлен клиенту.

0

По вопросам рекламы [email protected]