1

2つのテーブル内のデータベースに電子メールが存在するかどうかを確認するフォームがあります。

両方の検証にZend_Validate_Db_NoRecordExistsを使用していますが、2番目の検証のみをチェックします。

なぜそれが機能しないのか分かりますか?

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);
}
}
4

4 に答える 4

1

これを使用します:

addValidators (array $ validators, $ files = null)

ejem:

$this->addValidators(array($EmailExists,$EmailExists2,'EmailAddress'));

私は自分で働きます

于 2012-12-18T21:21:29.197 に答える
1
$this ->addElement($email = new Zend_Form_Element_Text('email'));   

$email->setLabel('E-mail')
      ->addValidator('Db_NoRecordExists', false, array('table' => 'table1', 'field' => 'email'))
      ->addValidator('Db_NoRecordExists', false, array('table' => 'table2', 'field' => 'email'))
      ->addValidator('EmailAddress', false);
于 2012-12-19T03:22:34.950 に答える
1

以下のようなものを試してみてください(テストされていないもの)、

$emailNotEmpty = new Zend_Validate_NotEmpty();
        $emailNotEmpty->setMessage('You must enter a email address.');
        $emailFormat = new Zend_Validate_Regex('/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/');
        $emailFormat->setMessage('You must enter a valid email address.');
        $emailUnique1 = new Zend_Validate_Db_NoRecordExists('referrals', 'email');
        $emailUnique1->setMessage('This email address is already registered.');
        $emailUnique2 = new Zend_Validate_Db_NoRecordExists('users', 'email');
        $emailUnique2->setMessage('This email address is already registered.');
        $email = new Zend_Form_Element_Text('email', array(
          'label' => 'Email Address:',
          'class' => 'text-size text hastip',
          'title' => $qtips_messages['key_email'],
          'tabindex' => '2',
          'required' => true,
          'value'=> '',
          'filters' => array('StringTrim'),
          'validators' => array(
            array($emailNotEmpty, true),
            array($emailFormat, true),
            array($emailUnique1,true),
            array($emailUnique2,true),
          ),
      'decorators' => $this->requiredElementDecorators,
      'description' => '<img src="../../images/star.png" alt="required" />',
        ));
        $this->addElement($email);
于 2012-12-19T05:33:46.400 に答える
1

要素に同じバリデーターを複数回追加することはないと思います。クラスZend_Form_Element addValidator()行1153を確認してください。コードによると、$this->_validators[$name] = $validator;同じバリデーターを要素に複数回追加すると、前者がオーバーライドされます。

isValid()カスタムフォームバリデーターを作成するか、要素で個別に使用して検証する必要があると思います。

于 2012-12-19T11:01:42.613 に答える