Впервые работаю c PHP. У меня абсолютно нет желания лезть в дебри бекенд разработки. Все что я хочу, это уже доделать свой проект, где php оказался необходим.А именно, мне нужно понять, как правильно обрабатывать PUT запрос из fetch с помощью PHP.
Есть такой JSON файл на сервере:
{
"data": [
{
"scale": "100%",
"tumbler": "100%",
"effects": "none",
"nickname": "1",
"description": "",
"likes": "0",
"comments": [],
"id": 1
}
]
Есть код с PHP. Какой уж смог написать:
<?php
$method = $_SERVER['REQUEST_METHOD'];
$data_json = file_get_contents('data.json');
if ($method == 'POST'){
$input = json_decode(file_get_contents("php://input"), true);
$dataPost = json_decode($data_json, true);
$dataPost['data'][] = $input;
file_put_contents('data.json', json_encode($dataPost));
$file = file_get_contents('data.json');
echo $file;
unset($file);
unset($dataPost);
} elseif ($method == 'GET'){
$decoded_json = json_decode($data_json, true);
$data = $decoded_json['data'];
echo json_encode($data);
// Method is GET
} elseif ($method == 'PUT'){
$input = json_decode(file_get_contents("php://input"), true);
$dataPost = json_decode($data_json, true);
$idPost = $input['id'];
$replacements = array($idPost => $input);
$newInput = array_replace($dataPost[$idPost], $input);
file_put_contents('data.json', json_encode($newInput));
$file = file_get_contents('data.json');
echo $file;
unset($file);
unset($dataPost);
}
?>
Есть самый обычный fetch Javascript код для отправки запроса:
const URL = '../json.php';
const request = (onSuccess, onError, method, data) => {
fetch(URL, {
method: method,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: data
})
.then((response) => response.json())
.then((response) => {
onSuccess(response);
})
.catch((error) => {
onError(error);
})
};
export { request }
Особо вникать в JS смысла нет.
Ну и говоря о главном: GET и POST Запросы работаю как надо. Их не сложно было реализовать, а вот PUT не работает вообще никак. Он просто удаляет весь JSON Объект и возвращает в JSON null.
При отправке PUT запроса, отправляется отдельный объект, который я изменил каким-то образом. Добавил лайки или, к рпимеру, добавил комментарии. Суть в том, что измененный объект должен менять объект внутри data массива. В PUT видно, что я там чет пытаюсь в таком духе сделать:
$replacements = array($idPost => $input);
$newInput = array_replace($dataPost[$idPost], $input);
Но я не знаю, как работает ли оно правильно, ибо дебажить PHP я не умею. Я не знаю, что, к примеру, получает $newInput.
Кароч, переходя к главному, как тут реализовать можно PUT?