Я пытаюсь проверить данные формы на бэкэнде с помощью Laravel и Vue, но не получаю ответ 422.
Это в моей функции контроллера:
$this->validate($request, [
'name' => 'required',
'city' => 'required',
'state' => 'required'
]);
$location = $request->isMethod('put') ?
Locations::findOrFail($request->id) : new Locations;
$location->id = $request->input('id');
$location->name = $request->input('name');
$location->address = $request->input('address');
$location->city = $request->input('city');
$location->state = $request->input('state');
$location->zip = $request->input('zip');
$location->phone = $request->input('phone');
if ($location->save())
{
return new LocationsResource($location);
}
Вот метод Vue:
addLocation() {
if (this.edit === false) {
// Add
fetch('api/location', {
method: 'post',
body: JSON.stringify(this.location),
headers: {
'content-type': 'application/json'
}
})
.then(res => res.json())
.then(data => {
this.clearForm();
alert('Location Added');
this.fetchArticles();
});
} else {
// Update
fetch('api/location', {
method: 'put',
body: JSON.stringify(this.location),
headers: {
'content-type': 'application/json'
}
})
.then(res => res.json())
.then(data => {
this.clearForm();
alert('Locations Updated');
this.fetchArticles();
})
}
}
Вот форма:
<form @submit.prevent = "addLocation" class = "mb-3">
<div class = "form-group">
<input type = "text" class = "form-control" placeholder = "Name" v-model = "location.name">
<input type = "text" class = "form-control" placeholder = "City" v-model = "location.city">
<input type = "text" class = "form-control" placeholder = "State" v-model = "location.state">
</div>
<button type = "submit" class = "btn btn-light btn-block">Save</button>
</form>
Когда я открываю инспектор и перехожу в Сеть-> XHR, я получаю все правильные коды состояния для CRUD, однако, когда форма должна выйти из строя, я не получаю код состояния 422 HTTP. Когда я отправляю форму без данных, она не сохраняется, но код состояния не отправляется, нет ответа для обратной связи с пользователем. Спасибо за помощь.
Когда я нажимаю кнопку «Сохранить» и намеренно проваливаю проверку, ничего не происходит, я не получаю ни ответа, ни обратной связи.
как вы могли сказать «проверка не пройдена», если нет ответа?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


$this->validate($request, [
'name' => 'required',
'city' => 'required',
'state' => 'required'
]);
Никогда не видел такого использования. Я не думаю, что у контроллера есть функция проверки. Попробуй это:
$request->validate([
'name' => 'required',
'city' => 'required',
'state' => 'required'
]);
Я только что проверил, и да, такое использование происходит из трейта ValidateRequest, но для этой функции не возникает никаких исключений. Он просто возвращает массив непроверенных полей. Видеть; laravel.com/api/5.5/Illuminate/Foundation/Validation/…
Я внес изменения, но результат тот же. На самом деле я получаю статус 302, набираю text / html, когда нажимаю "Сохранить". Разве я не должен получить 422? Имеет ли это какое-либо отношение к v-model = "location.name" в форме, но я ссылаюсь только на "name" в контроллере?
и это, вероятно, связано с добавлением поля id в экземпляр новой модели. не используйте никаких модификаций идентификаторов в экземпляре модели laravel, позвольте фреймворку обрабатывать себя. я имею в виду, используйте идентификатор только для метода findOrFail.
Можете ли вы клонировать этот проект и попытаться добавить к нему бэкэнд-валидацию? github.com/bradtraversy/larticles_vue_app Попробовал получить 302 вместо 422
Мне пришлось добавить «accept»: «application / json» в заголовок метода addLocation.
что ваш ответ говорит в XHR?