Doctrine2.2.1とCodeIgniter2.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
2番目は私にこの出力を与えます:
致命的なエラー:キャッチされない例外'PDOException'とメッセージ'SQLSTATE [23000]:整合性制約違反:1062/../applicationFolder/libraries/Doctrine/DBAL/Statementのキー'email_index''のエントリ'email@address.com'が重複しています.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 \ ClassMetadatain/.。/applicationFolder/libraries/Doctrine/DBAL/Statement.php、131行目
シンプルなものを見落としていますか?CI / Doctrineを使用してDBに対して一意の検証を正しく行う方法について何か助けはありますか?ありがとう!
注:自動ロード構成に「データベース」を追加した後、作業を開始できましたが$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email|is_unique[users.email]');
、これによりDoctrineが完全に機能しなくなります。