重命名 laravel 中的验证响应

rename validation responses in laravel

我的后端使用 laravel,我需要验证密码字段和确认字段,为此我有以下验证规则(摘要):

$rules = [
    'password' => 'required|min:5|confirmed',
    'password_confirmation' => 'required',
];

在前端,我正在使用 vue.js 和一个验证库 vee-validate,它看起来或多或少像这样:

<div class="control-group">
    <input type="password" v-validate="'required'" name="password" class="form-control" v-model="user.password">
    <span class="red" v-show="errors.has('password')">{{ errors.first('password') }}</span>
</div>
<div class="control-group">
    <input type="password" v-validate="'required|confirmed:password'" name="password_confirmation" class="form-control" v-model="user.password_confirmation">
    <span class="red" v-show="errors.has('password_confirmation')">{{ errors.first('password_confirmation') }}</span>
</div>

并修改了库,以便它接收并显示我从 Laravel 发送的验证。所有这些都正常工作,我的问题是 Laravel 发送的消息表明 密码 确认不相同,在密码字段中:

{"message":"The given data was invalid.","errors":{"password":["The password confirmation does not match."]}}

这对我来说是个问题,因为标记为错误的字段将是名称为 password 的字段,但我认为这是不正确的,因为响应消息应引用 password_confirmation 字段,这是 laravel 这种情况下的正常行为?我可以更改为答案中提到的字段吗?

这是 confirmed 规则的一般行为。根据文档,

Confirmed

The field under validation must have a matching field of foo_confirmation. For example, if the field under validation is password, a matching password_confirmation field must be present in the input.

因此,当确认字段与验证字段的值不同时,它会抛出该字段的错误。在您的情况下,密码字段不是确认。

您可以像这样修改验证逻辑:

$rules = [
    'password' => 'required|min:5',
    'password_confirmation' => 'required|same:password',
];

这将检查确认字段是否与密码相同,并在不匹配的情况下抛出错误。希望大家理解。