0

コントローラー、データベースに挿入する関数、およびフォームがあります。データベースにまだ登録されていない電子メールを入力した場合、データベースにユーザーを挿入したいだけです。

私のコントローラー:

$nome       = $this->_request->getParam('nome');
$senha      = $this->_request->getParam('senha');
$confirmar  = $this->_request->getParam('confirmar');
$email      = $this->_request->getParam('email');
$usuarios = new Application_Model_DbTable_Usuarios();
$usuarios->addUsuario($nome, $senha, $email);

データベースにユーザーを挿入する関数を含む DbTable_Usuario クラス

public function addUsuario($nome, $senha, $email) {
    $data = array(
        'id'    =>  'NULL',
        'nome'  =>  $nome,
        'senha' =>  $senha,
        'email' =>  $email,
        'nivel' =>  '0'
    );
    $this->insert($data);
}

そして私の zend_form

$email = new Zend_Form_Element_Text('email');
    $email->setLabel('Email:')
          ->setRequired(true)
          ->addValidator('EmailAddress')
          ->addValidator('NotEmpty');

入力されたメールがデータベースに既に存在するかどうかを確認するフォームに何かを追加する方法はありますか? 存在する場合はメッセージを表示し、存在しない場合はバンクに挿入します。

4

2 に答える 2

1

メール フィールドにZend_Validate_Db_NoRecordExistsバリデータを追加します。

于 2012-06-20T03:31:07.557 に答える
0

NoRecordExists を使用して、特定の問題についてより詳細な洞察を得る。バリデーターは、他のバリデーターが追加されるのと同じ方法で追加されます

$email->addValidator('Db_NoRecordExists', false, array('table'=>'usario', 'field'=>'email'));

フォームの設定によっては、ユーザーの編集にもまったく同じフィールドを使用します。ユーザーを編集するとき、NoRecordExists は少しトリッキーです。一度だけ、既存の電子メールに変更することは許可されるべきではありませんが、他のデータを更新して電子メールを保持できる必要があります (データベースの現在の行に存在します)。

したがって、そのルールから現在の行を削除する必要があります。私自身の質問からわかるように、いくつかのアプローチがありますが、コントローラーレベルからは次の方法が最適だと思います。

$form = new UserForm();
$form->getElement('email')->getValidator('Db_NoRecordExists')->setExclude(array(
  'field' => 'id',
  'value' => $idToEdit
))
于 2012-06-20T05:07:26.787 に答える