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这是一件坏事-一个用户可以将他的电子邮件(例如)更改为另一个用户的电子邮件-因此将有两个用户使用相同的电子邮件。从验证器中排除当前行。我明白你的意思,我不使用电子邮件作为唯一标识符可能是件好事。不过,我会记住这一点。