【问题标题】:zend form check record no exists in database数据库中不存在zend表单检查记录
【发布时间】:2012-12-18 20:58:36
【问题描述】:

我有一个表单可以检查数据库中是否存在 2 个表中的电子邮件。

我对两个验证都使用 Zend_Validate_Db_NoRecordExists,但它只检查第二个。

知道为什么它不起作用吗?

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

【问题讨论】:

    标签: php database forms zend-framework


    【解决方案1】:

    我认为您不会在一个元素上多次添加相同的验证器。检查类Zend_Form_ElementaddValidator() 第1153 行。根据代码$this->_validators[$name] = $validator;,当我们向一个元素多次添加相同的验证器时,前者将被覆盖。

    我认为您必须创建一个自定义表单验证器或在元素上单独使用isValid() 并对其进行验证。

    【讨论】:

    • 是的,我认为它确实被覆盖了。所以,也许我必须在控制器中验证它。谢谢。
    【解决方案2】:
    $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);
    

    【讨论】:

      【解决方案3】:

      试试下面的一些东西(未经测试的),

      $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);
      

      【讨论】:

        【解决方案4】:

        使用这个:

        addValidators (array $ validators, $ files = null)
        

        ejem:

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

        我自己工作

        【讨论】:

        • 不,仍然无法正常工作 :(,无论如何,谢谢
        • 你好正确的代码是这个(没有数组)* $validator = new Zend_Validate_Db_RecordExists ('users', 'emailaddress');
        • 谢谢,我会试试 tmr 并给你反馈
        猜你喜欢
        • 1970-01-01
        • 2013-08-07
        • 2023-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多