Контекст
Я реализую обновление информации о пользователе с помощью PUT
запроса в Laravel 8. Я использую Postman для отправки запроса и просмотра результатов.
Ожидаемое поведение
Мой PUT
запрос достигает функции контроллера, которая предназначена для обновления аутентифицированного пользователя. Последний успешно обновляется. Таким образом, вызов validate
выполняется успешно и находит данные в запросе.
Фактическое поведение
Мой PUT
запрос достигает функции контроллера, которая предназначена для обновления аутентифицированного пользователя. Последний не обновляется успешно. Фактически, вызов validate
выполняется успешно, но не находит данные в запросе.
Вместо этого проверка данных говорит:
{сообщение: Указанные данные недействительны., ошибки: {электронная почта: [Поле адреса электронной почты является обязательным. ], имя: [Поле имени обязательно для заполнения. ]}}
Маршрут и запрос
Запрос почтальона
curl --location --request PUT 'https://XYZ/api/set_user_data' \
--header 'X-Requested-With: XMLHttpRequest' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 12|leRLA5yopCLIxe0oN9MMThctqD78iJDjZdZQkcgs' \
--data-urlencode '[email protected]' \
--data-urlencode 'name=test2'
В терминологии Postman это означает, что Params не отправляются, отправляется токен носителя авторизации, отправляются некоторые заголовки и отправляются некоторые данные Body в коде x-www-form-urlencoded.
Маршрут API
In routes/api.php
:
Route::put('/set_user_data', [UserController::class, 'setUserData'])->name('set_user_data');
UserController::setUserData
:
public function setUserData(Request $request) {
if(!Auth::check()) {
return 'unauthenticated.';
}
$request->validate([
'email' => 'required|email',
'name' => 'required|string'
]);
// ... update user here but out of topic
}
Что я пытался сделать ... или не делать
Вот некоторые ответы Stackoverflow: отправить
POST
запрос и отправить в теле_method=PUT
. Я не хочу этого делать. Я действительно предпочитаю отправитьPUT
запрос. Потому что я разрабатываю API. Это полностью оправдывает тот факт, что я должен использоватьPUT
запрос, а неPUT
.Вот некоторые ответы Stackoverflow: используйте
x-www-form-urlencoded
, а не простойform
. Это не решает проблему; более того, это уже так. Может быть, это поможет с отправкой изображений. (обратите внимание, я не хочу отправлять сюда изображения).
Вопрос
Почему validate
Laravel не находит данные моего запроса и как это исправить?