у меня есть 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)
,
Попробуйте использовать 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;
Просто угадайте здесь, но если ваш REST-клиент принимает JSON для этого запроса, он захлебнется var_dump()
которая выводит строку, не являющуюся JSON, прямо на ответ. Попробуйте удалить var_dump()
Кроме того, я уверен, что ты должен позвонить http_response_code()
прежде чем любой вывод будет отправлен клиенту.