Laravel:验证器仅验证传递数据中存在的字段?

Posted

技术标签:

【中文标题】Laravel:验证器仅验证传递数据中存在的字段?【英文标题】:Laravel: Validator to validate only fields which exist in the passed data? 【发布时间】:2014-01-30 23:00:41 【问题描述】:

目前,如果我有一个键“名称”的必需规则,但我没有在数据数组中传递它,验证器将失败。我希望它在这种情况下不会失败。我只想验证数据数组中存在的字段。有没有一种内置的方法可以做到这一点,或者我必须扩展 Validator 类?

【问题讨论】:

为什么在不需要的输入值上使用 required? 【参考方案1】:

对于低于 5.9 的 Laravel 版本

对于任何拥有验证器对象的人,使用:

Method ->validateFilled(string $attribute, mixed $value)

也可以帮助他们验证给定的属性是否存在。可以在他们各自的情况下帮助某人。

来源:-https://laravel.com/api/5.8/Illuminate/Validation/Validator.html#method_validateFilled

【讨论】:

你有如何使用这个的例子吗?【参考方案2】:

您可以使用 nullable,如果电子邮件不存在,它将通过

$request->validate([
    'name' => 'required',
    'email' => 'nullable|email'
])

此外,您应该删除 required 验证。

【讨论】:

这是不正确的。假设您有一个登录表单并将电子邮件字段设为空,它将允许您在不输入电子邮件地址的情况下发送表单。使用sometimes,您还可以同时使用required,这可能是登录表单等所需的。 你到底为什么有时会被要求使用?您有 required_with, required_if 用于条件情况。 我确实给了你一个例子。如果不知何故你很固执,仍然不相信;文档甚至告诉您为什么要使用它:“在某些情况下,您可能希望仅当输入数组中存在该字段时才对该字段运行验证检查。要快速完成此操作,请将有时规则添加到您的规则列表中” . 我认为这个解决方案更有意义,因为当您有时使用时,它会期望该字段本身不存在于请求中,但在大多数情况下,我们确实有该字段存在于请求中但为空。再次感谢? 我读了几遍才得到这个。如果它帮助其他人 - 区别在于该字段是否始终出现在请求中但可能具有空值,或者有时可能根本不出现在请求中。前者使用nullable,后者使用sometimes。 There is a related note about this in the docs.【参考方案3】:

您可以使用sometimes 验证规则。

在某些情况下,您可能希望针对 仅当该字段存在于输入数组中时。要快速 完成此操作,将有时规则添加到您的规则列表中。

http://laravel.com/docs/validation#conditionally-adding-rules

$v = Validator::make($data, array(
    'email' => 'sometimes|required|email',
));

请务必运行 composer update,因为有时快捷方式是 Laravel 4.1.14 的一项功能。

https://twitter.com/laravelphp/status/422463139293057024

【讨论】:

那么 ['email' => 'email']; ?这行不通吗? 为什么我要设置“有时”和“需要”?如果它是“有时需要”,它可以为空。我错了吗? 我想你可能想检查一个字段是否存在,不能为空,我认为这个案例涵盖了这个 我真的不喜欢那个规则的名字。

以上是关于Laravel:验证器仅验证传递数据中存在的字段?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 验证 - 数组字段,仅允许两个字段之一,但都不是必需的

Laravel 验证仅在字段不为空时验证正则表达式

在使用 Laravel 进行验证期间检查输入中是不是存在字段

将当前字段的值传递给 Laravel 中的自定义验证函数

如果值存在于另一个字段数组中,Laravel 验证规则

仅当存在目标字段时,Laravel `lt` 和 'gt' 验证规则