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 验证 - 数组字段,仅允许两个字段之一,但都不是必需的