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 回答