在 laravel 中重命名验证响应

Posted

技术标签:

【中文标题】在 laravel 中重命名验证响应【英文标题】:rename validation responses in laravel 【发布时间】:2019-12-05 00:32:00 【问题描述】:

我正在使用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 在密码字段中发送 password 确认不一样的消息:

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

对我来说有什么问题,因为标记为错误的字段将是名称为密码的字段,但是我认为这是不正确的,因为响应消息应该参考 password_confirmation字段,这是这种情况下的正常行为 de laravel 吗?我可以更改为答案中提到的字段吗?

【问题讨论】:

如果password_confirmation必须匹配password,那么它也必须有同样的验证。 【参考方案1】:

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

Confirmed

验证中的字段必须有匹配的 foo_confirmation 字段。例如,如果验证的字段是密码,则输入中必须存在匹配的密码确认字段。

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

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

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

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

【讨论】:

非常感谢,因为我是 Laravel 新手,所以我没有注意到文档中的这条规则。谢谢你的时间! @max 很高兴看到它对你有用,祝 laravel 兄弟好运 ;)

以上是关于在 laravel 中重命名验证响应的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.0 - 在 1 个迁移中重命名多个列

如何在 Laravel 8 中重命名 .env 文件

如何在spring boot中重命名json对象(变量)名称

在 Laravel 迁移中重命名列,强制小写

在 MonoTouch 中重命名命名空间

如何在 Azure DevOps 中重命名任务组