我的ZF2 RecordExists方法有问题。我将解释我的问题案例/情景。
表:用户 专栏:id,emailaddress,websitename
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注册。 这怎么可能?让我知道你的建议。
答案 0 :(得分:1)
有两种方法可以做到这一点。
首先使用Excluding Record方法 在哪里排除websitename字段值的记录。
Zend \ Validator \ Db \ RecordExists和Zend \ Validator \ Db \ NoRecordExists 还提供了一种测试数据库的方法,不包括部分数据库 table,通过提供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函数。
我创建了一个Custom Validator oposite to Exclude,包括。 include是保留字,现在确定它是否有效。 check it here
有关此内容的更多阅读
请查看现有的验证工具,以创建自己的自定义验证器Custom validator guildline