I have a form that check if email exists in the database within 2 tables.
I’m using Zend_Validate_Db_NoRecordExists for both validate, but it only check the second one.
Any idea why it’s not working?
class Application_Form_ReferUser extends Zend_Form
{
public $email, $freeDownload, $buyNow;
public function init()
{
$this->setName('referUser');
$EmailExists = new Zend_Validate_Db_NoRecordExists(
array(
'table' => 'referrals',
'field' => 'email'
)
);
$EmailExists2 = new Zend_Validate_Db_NoRecordExists(
array(
'table' => 'users',
'field' => 'email'
)
);
$EmailExists->setMessage('This e-mail is already taken');
$EmailExists2->setMessage('This e-mail is already taken');
$this->email = $this->createElement('text', 'email')
->setLabel('Email')
->addValidator($EmailExists)
->addValidator($EmailExists2)
->addValidator('EmailAddress')
->setRequired(true);
$this->freeDownload = $this->createElement('button', 'btn_free_download')
->setLabel('Free Download')
->setAttrib('type', 'submit');
$this->buyNow = $this->createElement('button', 'btn_buy_now')
->setLabel('Buy Now')
->setAttrib('type', 'submit');
$this->addElements(array($this->email, $this->freeDownload, $this->buyNow));
$elementDecorators = array(
'ViewHelper'
);
$this->setElementDecorators($elementDecorators);
}
}
I don’t think you add same validator multiple times on an element. Check class
Zend_Form_ElementaddValidator()line 1153. According to the code$this->_validators[$name] = $validator;when we add same validator to an element multiple times the former will be overridden.I think you have to create a custom form validator or use
isValid()separately on the element and validate it.