我有我的控制器,我的函数插入到数据库中,还有表单。我只想在用户输入的电子邮件尚未在数据库中注册时将用户插入数据库。
我的控制器:
$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');
我有办法在表单中添加一些东西,它检查输入的邮件是否已经存在于数据库中?如果存在,则显示消息,如果没有,则将其插入银行。
将Zend_Validate_Db_NoRecordExists验证程序添加到电子邮件字段。
使用 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
))