1

我对 ZF2 RecordExists 方法有疑问。我将解释我有问题的案例/场景。

表:用户列:id、电子邮件地址、网站名称

Sample Records:
        1, user1@email.com, 1site.com
        2, user2@email.com, 1site.com
        3, user3@email.com, 2site.com
        4, user4@email.com, 2site.com
        5, user5@email.com, 1site.com
        6, user6@email.com, 3site.com
        7, user7@email.com, 4site.com

我将以下代码段用于已存在的条件。

//Check that the email address exists in the database
$validator = new Zend\Validator\Db\RecordExists(
    array(
        'table' => 'users',
        'field' => 'emailaddress'
    )
);

if ($validator->isValid($emailaddress)) {
    // email address appears to be valid
} else {
    // email address is invalid; print the reasons
    foreach ($validator->getMessages() as $message) {
        echo "$message\n";
    }
}

根据上述片段,user1@email.com 无法再次注册。因为,该电子邮件地址存在于表中。但是,我想在 2site.com 上注册。因为,user1@email.com 在 1site.com 中。因此,user1@email.com 无法再次注册 1site.com。但是,user1@email.com 可以注册到 2site.com。这怎么可能?让我知道你的建议。

4

1 回答 1

1

有两种方法可以做到这一点。

首先使用Excluding Record方法排除 websitename 字段值的记录。

Zend\Validator\Db\RecordExists 和 Zend\Validator\Db\NoRecordExists 还提供了一种测试数据库的方法,不包括表的一部分,通过提供一个字符串形式的 where 子句或一个带有键“字段”的数组和“价值”。

$email     = 'user@example.com';
$clause    = $db->quoteInto('email = ?', $email);
$validator = new Zend\Validator\Db\RecordExists(
    array(
        'table'   => 'users',
        'field'   => 'username',
        'exclude' => $clause
    )
);

if ($validator->isValid($username)) {
    // username appears to be valid
} else {
    // username is invalid; print the reason
    $messages = $validator->getMessages();
    foreach ($messages as $message) {
        echo "$message\n";
    }
}

其次,编写您自己的自定义验证器。您需要扩展AbstractDB类并在RecordExists类的方向上创建自己的类。在您自己的 cust 类中,您可以定义自己的查询并将其传递给 isValid 函数。

我创建了一个与排除相反的自定义验证器,它是包含。include 是保留字,现在确定它是否会起作用。 在这里检查

更多关于此的阅读

准则 1

请查看现有验证器以创建您自己的自定义验证器自定义验证器准则

链验证器 2

于 2013-01-25T14:13:08.933 回答