Проверка формы Vue и Laravel не возвращает ответ 422

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

что ваш ответ говорит в XHR?

Tharaka Dilshan 04.10.2018 19:38

Когда я нажимаю кнопку «Сохранить» и намеренно проваливаю проверку, ничего не происходит, я не получаю ни ответа, ни обратной связи.

mcornille 04.10.2018 20:18

как вы могли сказать «проверка не пройдена», если нет ответа?

Tharaka Dilshan 04.10.2018 20:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
465
2

Ответы 2

$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/…

mutas 04.10.2018 20:44

Я внес изменения, но результат тот же. На самом деле я получаю статус 302, набираю text / html, когда нажимаю "Сохранить". Разве я не должен получить 422? Имеет ли это какое-либо отношение к v-model = "location.name" в форме, но я ссылаюсь только на "name" в контроллере?

mcornille 04.10.2018 21:20

и это, вероятно, связано с добавлением поля id в экземпляр новой модели. не используйте никаких модификаций идентификаторов в экземпляре модели laravel, позвольте фреймворку обрабатывать себя. я имею в виду, используйте идентификатор только для метода findOrFail.

mutas 05.10.2018 00:42

Можете ли вы клонировать этот проект и попытаться добавить к нему бэкэнд-валидацию? github.com/bradtraversy/larticles_vue_app Попробовал получить 302 вместо 422

mcornille 05.10.2018 17:19

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

Другие вопросы по теме