我正在使用 Doctrine 2.2.1 和 CodeIgniter 2.1.0
我正在尝试对表单中的电子邮件地址字段进行唯一验证 - 只是为了确保该字段不存在于数据库中。
我首先在这里查看这个好的(但过时的)教程和这里的 CodeIgniter 文档
CI 文档显示了使用 is_unique[table.field] 的示例,并且似乎说使用回调可以做到这一点,但我似乎并没有掌握该代码是如何做到的,我自己也无法让它工作。
我试过这个:
$this->form_validation->set_rules('email', 'E-mail',
'required|valid_email|is_unique[users.email]');
和这个:
$this->form_validation->set_rules('email', 'E-mail', 'callback_email_check');
(这几乎是从 CodeIgniter 示例中逐字记录的)
都不工作。第一个给我以下输出:
A PHP Error was encountered
Severity: Notice
Message: Undefined property: Signup_form::$db
Filename: libraries/Form_validation.php
Line Number: 954
Fatal error: Call to a member function limit() on a non-object in /../systemFolder/libraries/Form_validation.php on line 954
第二个给了我这个输出:
致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [23000]:完整性约束违规:1062 重复条目“email@address.com”,用于 /../applicationFolder/libraries/Doctrine/DBAL/Statement 中的键“email_index” .php:131 堆栈跟踪:#0 /../applicationFolder/libraries/Doctrine/DBAL/Statement.php(131): PDOStatement->execute(NULL) #1 /../applicationFolder/libraries/Doctrine/ORM/Persisters /BasicEntityPersister.php(239): Doctrine\DBAL\Statement->execute() #2 /../applicationFolder/libraries/Doctrine/ORM/UnitOfWork.php(896): Doctrine\ORM\Persisters\BasicEntityPersister->executeInserts( ) #3 /../applicationFolder/libraries/Doctrine/ORM/UnitOfWork.php(304): Doctrine\ORM\UnitOfWork->executeInserts(Object(Doctrine\ORM\Mapping\ClassMetadata in /../applicationFolder/libraries/Doctrine/DBAL/Statement.php 在第 131 行
我忽略了一些简单的事情吗?有关如何使用 CI/Doctrine 正确对数据库进行唯一验证的任何帮助?谢谢!
注意:在将“数据库”添加到自动加载配置后,我能够开始$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email|is_unique[users.email]');
工作,但是,这完全破坏了 Doctrine。