Проверка Laravel с помощью vue js

Я хочу отправить запрос ajax, используя запрос vue-resource this.$http.post. он отлично работал, если я прошел все правила проверки, но я хочу получить некоторые проверки, если это не удастся. до сих пор я продолжаю получать ошибку 500, если я не заполняю некоторые поля ввода. мне трудно отлаживать ошибку, потому что она не появлялась на вкладке сети.

вот что я сделал до сих пор

//my modal component
<script>
export default {
    props: ['show'],

    data() {
        return {
            input: {
                id: '',
                name: '',
                address: '',
                email: ''
            },
            errorInputs: {}
        }
    },

    methods: {
        createStudent() {
            this.$http.post('/students', this.$data.input)
                .then((response) => {
               alert('added new row!)
            }, (response) => {
                console.log(response.data);
            });
        }
      }
   }
</script>

// my controller

public function store(Request $request) {
    $validator = $this->validate($request,[
        'id' => 'required',
        'name' => 'required|unique:students',
        'email' => 'required|unique:students|email',
        'address' => 'required',
    ]);

    if($validator->passes()){
        Student::create($request->all());

        return response()->json([], 201);
    }

    $errors = json_decode($validator->errors());

    return response()->json([
        'success' => false,
        'message' => $errors
    ],422);
}

любая помощь и ссылки будут оценены. я использую laravel 5.3 и vue js 2


person ishadif    schedule 12.11.2016    source источник
comment
Может быть, у вас включены фильтры на вкладке сети? Проверьте, отмечен ли он all (или хотя бы xhr) на вашей вкладке. Это точно поможет. Вы также можете проверить наличие журналов в storage/log/laravel.log   -  person Skysplit    schedule 13.11.2016
comment
да, я понимаю это после публикации моего вопроса, извините. не могли бы вы помочь мне, как передать проверку laravel в компонент vue js? я застрял на этом этапе.   -  person ishadif    schedule 13.11.2016
comment
В чем тогда проблема? Насколько я вижу, вы движетесь в правильном направлении.   -  person Skysplit    schedule 13.11.2016
comment
я не могу передать данные проверки laravel в компонент vue, когда проверка не удалась. я хочу отобразить их в своем шаблоне. я знаю, что laravel отправит ответ json на запрос ajax, но я не могу получить эти данные   -  person ishadif    schedule 13.11.2016


Ответы (2)


$this->validate() возвращает 422 ответ об ошибке вместе с вашими ошибками проверки, поэтому вы должны получить эти ошибки в then() втором обратном вызове (как вы делаете сейчас). Тело вашего компонента vue должно быть таким:

{
    data() {
        // ...
    },
    createStudent() {
        this.$http
            .post('/students', this.input)
            .then(this.handleSuccess, this.handleError)
    },
    handleSuccess(res) {
        alert('student created')
    },
    handleError(res) {
        if (res.status === 422) {
            this.errorInputs = res.body
        } else {
            alert('Unkown error!')
        }
    }
}

Не забудьте добавить v-model="input.fieldName" свойств к своим входам.

person Skysplit    schedule 13.11.2016
comment
спасибо, но я все еще получаю 500 как-то. Я думаю, что в моем коде laravel что-то не так. я вернусь к тебе позже - person ishadif; 13.11.2016
comment
очевидно, я изменил функцию рендеринга на handler.php, чтобы генерировать исключение перед этим кодом return parent::render($request, $exception);. вот почему я продолжаю получать 500 ошибок. проверка на стороне vue теперь работает правильно - person ishadif; 13.11.2016
comment
@ishadif Приятно это слышать! Надеюсь, мой ответ хоть немного помог вам :) - person Skysplit; 13.11.2016

Не забудьте включить токен сеанса вместе с вашим сообщением, если, конечно, вы не отключите токены csrf для этого маршрута.

Начиная с Laravel 5.1 вы можете отключить это в своем промежуточном программном обеспечении для проверки токена.

 <?php namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as ...

class VerifyCsrfToken extends ...    {
  protected $except = [
    'payment/*',
  ];
}
person Alejandro    schedule 28.06.2017