【问题标题】:Laravel 5 validation: Unique-rule to check for emails with exceptionsLaravel 5 验证:检查异常电子邮件的唯一规则
【发布时间】:2015-07-03 05:03:41
【问题描述】:

对于测试和支持问题,我希望允许在我的用户数据库中多次使用一两封电子邮件。所有其他电子邮件都应该是唯一的。 例如:

"email" => "required|email|unique:users,email,admin@test.de"

这不起作用,我不能使用 id 字段作为例外,因为会有多个条目使用同一个电子邮件。

【问题讨论】:

    标签: validation laravel laravel-5


    【解决方案1】:

    听起来像是sometimes 的案例

    $whitelist = ['admin@test.de', 'foo@bar.com', 'etc@etc.com'];
    $validator->sometimes('email', 'unique:users', function($input) use ($whitelist){
        return ! in_array($input->email, $whitelist);
    });
    

    表示如果电子邮件不在白名单中,则适用unique 规则。


    在表单请求中,您可以通过覆盖 getValidatorInstance() 向验证器实例添加内容:

    protected getValidatorInstance(){
        $validator = parent::getValidatorInstance();
        $validator->sometimes(...);
        return $validator;
    }
    

    【讨论】:

    • 这看起来不错,但是在使用 form-request-validation 时如何实现呢?
    • 但是我在哪里调用该方法?当使用构造方法调用它时,我得到一个 FatalErrorException。
    • 您不必自己调用它。 Laravel 在内部这样做。您只需覆盖它即可将有时规则附加到验证器。
    • 啊,现在它可以工作了:当然,我必须将返回规则设置为“电子邮件”=>“有时|必需|电子邮件”
    【解决方案2】:

    试试下面的XX是你的测试用户ID。

    "email" => "required|email|unique:users,email,XX,id"
    

    PS 如果你愿意,也可以在运行时动态设置

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 2019-01-26
      • 2016-11-02
      • 2015-02-27
      • 2015-03-24
      • 2014-06-08
      相关资源
      最近更新 更多