我在预期时收到来自服务器的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>
答案 0 :(得分:1)
在Laravel 5.5中(我认为),验证错误的JSON响应从仅仅是错误对象变为包含错误和单个消息的对象。因此,要访问响应中的错误消息,您需要执行以下操作:
this.errors.record(error.response.data.errors)
我建议,如果您还没有,请获取Vue Devtools插件/扩展程序,以帮助您调试代码,并了解一般情况。
最后,只是一个FYI,Spatie为此做了一段时间(根据Jeff的教训)。如果你只是通过课程并希望自己构建它,你可以将它作为参考点。