Laravel 5.6.7中的自定义错误消息和特定组件中的Vue.js

问题描述 投票:1回答:2

我正在使用Laravel 5.6.7和vue.js

验证消息

当验证在vue.js中有效时,它会显示“用户名字段是必需的”。可以是“请输入用户名”吗?我可以为同一个字段使用两个自定义错误消息吗?例

  1. 必填:请输入用户名。
  2. Alpha:请输入alpha chars。

我正在使用vee-validate包进行表单验证

以下是刀片中的代码

<div class="container-fluid">
    <div class="row justify-content-center">
        <div class="col-md-12">
            <create-user></create-user>
        </div>
    </div>
</div>

vue.js组件中的代码。

<template>
    <form role="form" class="row">      
        <input name="User Name" v-validate data-vv-rules="required|alpha" type="text"   
             v-model="createForm.UserName">
        <p v-if="errors.has('User Name')">{{ errors.first('User Name') }}</p>           
        <button type="button" @click="validateBeforeSubmit()" class="btn btn-primary">
            Create
        </button>
    </form>
</template>

<script>
    export default {
        data() {
            return {
                createForm: {  
                    UserName: ''
                }
            };
        },        
        methods: {
            validateBeforeSubmit() {
                this.$validator.validateAll();
            }
        }
    }
</script>
vue.js laravel-5.6 vee-validate
2个回答
4
投票

要达到你想要的效果,你可以使用Field Specific Custom Messages

不用多了,你只需创建一个customMessages字典,并使用.localize()将其添加到验证器中。

因此,模板中的任何内容都不会更改,但在<script>中,您将声明customMessages并将其应用于created()生命周期钩子中,如下所示和演示中所示:

<script>
    const customMessages = {                                              // added
        custom: {                                                         // added
            'User Name': {                                                // added
                required: 'Required: Please enter username',              // added
                alpha: 'Alpha: Please enter alpha chars only.'            // added
            }                                                             // added
        }                                                                 // added
    };                                                                    // added

    export default {
        data() {
            return {
                createForm: {  
                    UserName: ''
                }
            };
        },
        created() {                                                       // added
            // change 'en' to your locale                                 // added
            this.$validator.localize('en', customMessages);               // added
        },                                                                // added
        methods: {
            validateBeforeSubmit() {
                this.$validator.validateAll();
            }
        }
    }
</script>

Runnable演示:

Vue.use(VeeValidate);

const customMessages = {
  custom: {
    'User Name': {
      required: 'Required: Please enter username',
      alpha: 'Alpha: Please enter alpha chars only.'
    }
  }
};

Vue.component('create-user', {
  template: '#create-user-template',
  data() {
    return {
      createForm: {
        UserName: ''
      }
    };
  },
  created() {
    // change 'en' to your locale
    this.$validator.localize('en', customMessages);
  },
  methods: {
    validateBeforeSubmit() {
      this.$validator.validateAll();
    }
  }
});

new Vue({
  el: '#app'
})
<script src="https://unpkg.com/vue"></script>
<script src="https://cdn.jsdelivr.net/npm/vee-validate@latest/dist/vee-validate.js"></script>

<template id="create-user-template">
   <form role="form" class="row">      
        <input name="User Name" v-validate data-vv-rules="required|alpha" type="text"   
             v-model="createForm.UserName">
        <p v-if="errors.has('User Name')">{{ errors.first('User Name') }}</p>           
        <button type="button" @click="validateBeforeSubmit()" class="btn btn-primary">
            Create
        </button>
    </form>
</template>

<div id="app">
  To see the 'required' message: type "x", then delete<br>
  To see the 'alpha' message: type "_"<br><br>
  <div class="container-fluid">
      <div class="row justify-content-center">
          <div class="col-md-12">
              <create-user></create-user>
          </div>
      </div>
  </div>
</div>

-3
投票

这是行不通的,使用ajax来获取vuejs和服务器之间的数据

© www.soinside.com 2019 - 2024. All rights reserved.