【发布时间】:2016-06-20 17:56:59
【问题描述】:
在 Laravel 验证中 sometimes|required|email 和 sometimes|email 有什么区别?我读过 this discussion from laracasts 但对我来说仍然模棱两可
【问题讨论】:
标签: validation laravel required
在 Laravel 验证中 sometimes|required|email 和 sometimes|email 有什么区别?我读过 this discussion from laracasts 但对我来说仍然模棱两可
【问题讨论】:
标签: validation laravel required
来自文档:
在某些情况下,您可能希望针对 仅当该字段存在于输入数组中时。要快速 完成此操作,将有时规则添加到您的规则列表中
https://laravel.com/docs/5.2/validation#conditionally-adding-rules
如果我可以简化它,我会说sometimes 的意思是,如果该字段出现在请求中,则仅应用其余的验证规则。想象一下sometimes 就像一个 if 语句,在应用任何规则之前检查请求/输入中是否存在该字段。
当我在页面上有一些 javascript 会禁用一个字段时,我会使用此规则,因为当一个字段被禁用时,它不会显示在请求中。如果我简单地说required|email,验证器将始终应用规则,而使用sometimes 规则将仅在字段出现在请求中时应用验证!希望这是有道理的。
例子:
input: []
rules: ['email' => 'sometimes|required|email']
result: pass, the request is empty so sometimes won't apply any of the rules
input: ['email' => '']
rules: ['email' => 'sometimes|required|email']
result: fail, the field is present so the required rule fails!
input: []
rules: ['email' => 'required|email']
result: fail, the request is empty and we require the email field!
【讨论】:
sometimes 指的是 POST 键,require 指的是它的值。所以如果需要一个字段,则键和值都应该出现在 POST 中。对吗?
POST 或GET。是的,这实际上是一种很好的解释方式。您当然可以结合sometimes 和required 规则。如果您想进一步了解它在框架中的工作原理,您可以随时查看源代码:github.com/laravel/framework/blob/5.2/src/Illuminate/Validation/… 和测试:github.com/laravel/framework/blob/5.2/tests/Validation/…