Validation 如何仅在使用zend framework时没有电子邮件地址的情况下在数据库中插入用户?

Validation 如何仅在使用zend framework时没有电子邮件地址的情况下在数据库中插入用户?,validation,zend-framework,email,Validation,Zend Framework,Email,我有控制器、要插入数据库的函数和表单。 我只想在数据库中插入用户,如果他输入的电子邮件尚未在数据库中注册 我的控制器: $nome = $this->_request->getParam('nome'); $senha = $this->_request->getParam('senha'); $confirmar = $this->_request->getParam('confirmar'); $email = $this

我有控制器、要插入数据库的函数和表单。 我只想在数据库中插入用户,如果他输入的电子邮件尚未在数据库中注册

我的控制器:

$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);
My DbTable_Usuario类,其中包含在数据库中插入用户的函数

public function addUsuario($nome, $senha, $email) {
    $data = array(
        'id'    =>  'NULL',
        'nome'  =>  $nome,
        'senha' =>  $senha,
        'email' =>  $email,
        'nivel' =>  '0'
    );
    $this->insert($data);
}
还有我的zend_表格

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

我有办法在表单中添加一些内容,它会检查输入的邮件是否已经存在于数据库中?如果存在,则显示消息,如果不存在,则将其插入银行。

将验证程序添加到电子邮件字段。

使用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
))

当我想更新时,我通常只调用
->removeValidator('Db_NoRecordExists')
。@RockyFord这是一件坏事-一个用户可以将他的电子邮件(例如)更改为另一个用户的电子邮件-因此将有两个用户使用相同的电子邮件。从验证器中排除当前行。我明白你的意思,我不使用电子邮件作为唯一标识符可能是件好事。不过,我会记住这一点。