【问题标题】:Laravel 5 - real meaning of "sometimes" in validation rulesLaravel 5 - 验证规则中“有时”的真正含义
【发布时间】:2016-01-06 18:41:43
【问题描述】:

在 Laravel 5 中,让我们考虑这两种不同的验证规则:

Validator::make($data, ['email' => 'sometimes|email']);

Validator::make($data, ['email' => 'email']);

测试后:

  • 如果 $data['email'] 存在并且是有效的电子邮件 => 两者都会成功。
  • 如果 $data['email'] 存在并且不是有效的电子邮件 => 两者都会失败。
  • 如果 $data 确实有电子邮件密钥 => 两者都会成功。

那么这两条规则有什么区别呢? “有时”的目的是什么?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    来自 Laravel 的 validation docs

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

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

    这对于required 规则特别有用,如果留空该字段将引发错误,但sometimes 只会在该字段首先存在时才会这样做。如果没有sometimes,缺少物理字段将总是导致“必填字段”错误。

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

    【讨论】:

    • 好吧,规则“sometimes|email”和规则“email”之间真的没有区别,对吧? “有时”只有在与“必需”结合使用时才有用,对吧?
    • 以下规则完全不同:required|emailsometimes|required|emailemail。如果输入为空、输入不是有效的电子邮件地址以及没有email 输入字段,则第一个失败。第二条规则在您有email 输入字段时才会失败。如果输入不是有效的电子邮件地址,第三个将失败。
    • 你所说的一切都是真实而有趣的。但我的问题要简单得多:我只是在比较这两条规则,而且只比较这两条规则:sometimes|emailemail。你从不谈论sometimes|email :) 我们同意这两个是严格等价的吗?
    • 根据我在 Laravel 的源代码中挖掘的信息,如果设置了 sometimes 规则,验证器会检查该字段是否存在,然后 只有 运行其他规则.因此,如果您没有电子邮件字段,则不会检查任何其他规则。但是,如果您确实有这样的字段,则将正常检查其他规则。这意味着,如果您始终拥有该字段,它将始终被验证,就好像唯一的规则是 email
    • 为什么他们不称其为可选
    【解决方案2】:

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

    如果

    1. 验证规则是'email' => 'email' - 如果表单提交时电子邮件地址为空,错误消息将是:

    电子邮件必须是有效的电子邮件地址。

    1. 验证规则是'email' => 'sometimes|required|email' - 如果表单提交时电子邮件地址为空,错误消息将是:

    电子邮件字段是必需的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 2016-04-30
      • 2015-06-14
      • 2016-05-13
      • 1970-01-01
      • 2021-03-01
      • 2018-04-18
      相关资源
      最近更新 更多