Php Laravel 5-真正意义上的;有时";在验证规则中 5中,我们考虑2种不同的验证规则: Validator::make($data, ['email' => 'sometimes|email']);

Php Laravel 5-真正意义上的;有时";在验证规则中 5中,我们考虑2种不同的验证规则: Validator::make($data, ['email' => 'sometimes|email']);,php,laravel,Php,Laravel,及 测试后: 如果$data['email']存在并且是有效的电子邮件=>则两者都将成功 如果$data['email']存在且不是有效的电子邮件=>则两者都将失败 如果$data确实有一个电子邮件密钥=>这两个密钥都将成功 那么这两条规则有什么区别呢?“有时”的目的是什么?来自拉威尔的: 在某些情况下,您可能希望仅当输入数组中存在某个字段时,才对该字段运行验证检查。要快速完成此操作,请将有时规则添加到规则列表中 因此,本质上,email只有在该字段实际上是POST请求的一部分时才会被验证

测试后:

  • 如果$data['email']存在并且是有效的电子邮件=>则两者都将成功
  • 如果$data['email']存在且不是有效的电子邮件=>则两者都将失败
  • 如果$data确实有一个电子邮件密钥=>这两个密钥都将成功
那么这两条规则有什么区别呢?“有时”的目的是什么?

来自拉威尔的:

在某些情况下,您可能希望仅当输入数组中存在某个字段时,才对该字段运行验证检查。要快速完成此操作,请将
有时
规则添加到规则列表中

因此,本质上,
email
只有在该字段实际上是
POST
请求的一部分时才会被验证

这对于
required
规则特别有用,如果字段留空,该字段将抛出错误,但对于
规则,有时只有在字段首先存在的情况下才会抛出错误。如果有时没有
,丢失的物理字段将始终导致“必填字段”错误


这不是你经常需要的东西,但它是一个漂亮的小功能。

想象一下你网站上的简单表单。用户可以检查他是否想要订阅时事通讯,然后他必须键入电子邮件地址。如果他不想订阅,电子邮件字段将被禁用,并且不会发送到服务器。

如果

  • 验证规则为
    'email'=>'email'
    -如果提交的表单中电子邮件地址为空,则错误消息将为:
  • 电子邮件必须是有效的电子邮件地址

  • 验证规则是“电子邮件”=>“有时需要电子邮件”
  • -如果表单提交时电子邮件地址为空,则错误消息为: 电子邮件字段是必需的


    好吧,所以“有时发电子邮件”和“发电子邮件”之间真的没有区别,对吗?“有时”仅在与“必需”结合使用时才有用,对吗?以下规则完全不同:
    必需|电子邮件
    有时|必需|电子邮件
    ,以及
    电子邮件
    。如果输入为空,如果输入不是有效的电子邮件地址,并且没有
    电子邮件
    输入字段,则第一个失败。第二条规则只有在您有
    电子邮件
    输入字段时才会失败。如果输入的不是有效的电子邮件地址,第三个将失败。你所说的一切都是真实和有趣的。但我的问题要简单得多:我只是比较这两条规则,而这两条规则只是:
    有时| email
    email
    。你从不谈论
    有时| email
    :)我们是否同意这两个严格等效?从我在Laravel的源代码中可以看出,如果设置了
    有时
    规则,验证程序会检查字段是否存在,然后才运行其他规则。因此,如果您没有电子邮件字段,则不会检查任何其他规则。但是,如果您确实有这样一个字段,则会正常检查其他规则。这意味着,如果您始终拥有该字段,它将始终被验证,就像唯一的规则是
    电子邮件一样。为什么他们不将其称为可选
    
    Validator::make($data, ['email' => 'email']);