验证消息未显示Vue.js 2和Laravel 5.6 SPA,Axios

时间:2018-06-02 06:50:00

标签: laravel vue.js

我在预期时收到来自服务器的422响应,并且控制台中显示正确的服务器端消息,但我似乎无法在我的视图中显示这些消息。有什么想法吗?

我正在使用Laravel 5.6与Vue.js 2和Axios,并在laracasts上学习Vus.js课程(很棒的课程)。

    <template>
        <div class="container">
            <div class="page-header">
                <h1>Create Person</h1>
        </div>
        <form @submit.prevent="onSubmit" action="POST">
            <div>
                <label for="fname" class="col-md-3 control-label ">First Name:</label>
                <div class="col-md-8">
                    <input type="text" name="fname" v-model='fname' id="fname" autocomplete='off'>
                    <span v-text="errors.get('fname')"></span>
                </div>
            </div>
            <div>
                <label for="lname" class="col-md-3 control-label ">Last Name:</label>
                <div class="col-md-8">
                    <input type="text" name="lname" v-model='lname' id="lname" autocomplete='off'>
                    <span v-text="errors.get('lname')"></span>
                </div>
            </div>
            <div class="row">
                <div class="col-md-12">
                    <div class="form-group">
                        <div class="col-md-8 col-md-offset-4">
                            <button type="submit" class="btn btn-trans-green square pull-right card-1">
                                Submit
                            </button>
                        </div>
                    </div>
                </div>
            </div>
         </form>
      </div>
  </template>

<script>

    class Errors {
        constructor(){
            this.errors = {};
        }
        get(field){
            if (this.errors[field]){
                return this.errors[field][0];
            }
        }
        record(errors){
            this.errors = errors;
        }
    }

    export default {
        data: function() {
            return {
                fname:'',
                lname:'',
                errors: new Errors()
            }
        },
        methods: {
          onSubmit(){
              axios.post('/customers', this.$data)
                      .then(response =>  alert('Success'))
                      .catch(error => 
  this.errors.record(error.response.data));
          }
        }
    }
  </script>

1 个答案:

答案 0 :(得分:1)

在Laravel 5.5中(我认为),验证错误的JSON响应从仅仅是错误对象变为包含错误和单个消息的对象。因此,要访问响应中的错误消息,您需要执行以下操作:

this.errors.record(error.response.data.errors)

我建议,如果您还没有,请获取Vue Devtools插件/扩展程序,以帮助您调试代码,并了解一般情况。

最后,只是一个FYI,Spatie为此做了一段时间(根据Jeff的教训)。如果你只是通过课程并希望自己构建它,你可以将它作为参考点。

Spatie - Form Backend Validation