验证规则如何在laravel中工作

时间:2013-12-19 22:18:00

标签: php validation laravel laravel-4 short-circuiting

在laravel中,为了验证用户的一些输入,我们可以使用Validator Class。

例如,通过电子邮件注册,验证规则可以是:

array( 'email' => 'required|email|unique:users,email' )

其中说,电子邮件是必需的,电子邮件应采用电子邮件格式,并且之前不应在表users中注册。 (应该是唯一的)

那么,这是如何工作的?

是否使用 short-circuit ?如果我们一步一步走

  • 检查输入是否由required设置 如果通过,跳转到下一个规则
  • 然后检查它是否是电子邮件格式
    如果通过,跳转到下一个规则
  • 检查表users
  • 中是否不存在

我问了一个人,他说,检查一切,完成所有规则 如果未通过required规则,则没有理由检查输入是否为电子邮件格式 如果它不是电子邮件格式,则无需检查数据库。

有谁知道它是如何工作的?

2 个答案:

答案 0 :(得分:4)

这取决于规则。实际上,如果required属性失败,Laravel将停止处理其他规则。但是,如果required通过,它将继续验证其他规则。

这意味着您可以在同一个字段上收到多个验证错误。

答案 1 :(得分:2)

我找不到Laravel 4的详细信息,但Laravel 5.4 documentation表示所有验证规则都按顺序运行而没有进行短路评估。

在Laravel 5中,您可以通过添加“保释”前缀来强制进行短路评估。验证规则。

$this->validate($request, [
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);

我来到这里寻找为什么短路会在默认情况下关闭,我认为James在他的推理中是正确的,因为它是在同一领域接收多个验证错误。