Проверка формы Vue и Laravel не возвращает ответ 422 - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь проверить данные формы на бэкэнде с помощью 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.Когда я отправляю форму без данных, она не сохраняется, но не отправляется код состояния, и нет ответа пользователю.Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Мне пришлось добавить «accept»: «application / json» в заголовок метода addLocation.

0 голосов
/ 04 октября 2018
$this->validate($request, [
    'name' => 'required',
    'city' => 'required',
    'state' => 'required'
    ]);

Я никогда не видел такого использования.Я не думаю, что контроллер имеет функцию проверки.Попробуйте это:

$request->validate([
    'name' => 'required',
    'city' => 'required',
    'state' => 'required'
    ]);
...