【问题标题】:Special validation of email field in LaravelLaravel 中电子邮件字段的特殊验证
【发布时间】:2015-07-20 13:09:06
【问题描述】:

我的应用中有简单的设置部分,人们可以在其中更改各种帐户设置,包括电子邮件。一旦他们发布了表格,我就使用FormRequest 来验证所有字段是否符合一些规则,很简单。但是如何验证电子邮件字段?这就是我的意思。如果用户想要更新电子邮件,我们需要确保它没有被其他人占用。但是我们不能将规则定义为

'email' => 'email|unique:users',

因为,如果他们不想更新电子邮件,他们将永远无法提交表单(默认情况下,当页面加载时,我会在字段中显示当前电子邮件预填)。因此,除了当前用户的电子邮件之外,我们需要此电子邮件对表是唯一的。如何正确验证电子邮件字段?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    很简单,您只需定义忽略哪个用户电子邮件地址,是的,您可以在验证中忽略多个电子邮件地址。

    例如,考虑一个包含用户名、电子邮件地址和位置的“更新个人资料”屏幕。当然,您需要验证电子邮件地址是否唯一。但是,如果用户只更改名称字段而不更改电子邮件字段,则您不希望引发验证错误,因为用户已经是电子邮件地址的所有者。如果用户提供的电子邮件地址已被其他用户使用,您只想抛出验证错误。要告诉唯一规则忽略用户的 ID,您可以将 ID 作为第三个参数传递:

    'email' => 'unique:users,email_address,current_user_id'
    

    Form more detailed information click here.

    【讨论】:

      【解决方案2】:

      您已经接近了,您只需在规则中添加更多变量,如下所示:

      'unique:users,email,'.Auth::id().',id'

      上面的语句将建立唯一的规则并忽略当前认证用户拥有的电子邮件

      【讨论】:

      • 上面的代码只是一个简短的解决方案,我们总是建议您创建自己的自定义验证类和方法,然后通过服务提供商注册它们。
      • 的建议也在文档中:laravel.com/docs/5.1/validation#rule-unique
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 2017-09-25
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多