在Zend_Form中,如何避免Zend_Validate_Email产生多个错误?

kan*_*der 9 php zend-framework zend-form zend-validate

我正在构建一个ZendFramework应用程序,它作为一个登录表单,要求提供电子邮件地址和密码 - 在使用登录尝试访问数据库之前验证电子邮件地址似乎是有意义的,因为无效的电子邮件永远不会导致有效命中.Zend_Validate_EmailAddress似乎是正确的方法,但我遇到了生成多个错误的问题(在底部的问题,在代码之后).

我的表格目前有以下内容

//WPMail_Form_Login::init()
$email = $this->addElement('text', 'email', array(
    'label'=>'Email',
    'required'=>true,
    'filters'=>array('stringtrim'),
    'validators'=>array(array('emailaddress', true, array(
        'messages'=>array(
            'emailAddressInvalidHostname'=>'Your email address is invalid',
            'emailAddressInvalidFormat'=>'Your email address is invalid',
            '...'=>'(repeat for all message templates)'
        )
    ))),
));
Run Code Online (Sandbox Code Playgroud)

在控制器中我直接将表单传递给视图:

// WPMail_AuthController::loginAction()
$this->view->form = $form;
Run Code Online (Sandbox Code Playgroud)

在视图中,它直接回应:

// views/scripts/auth/login.phtml
<?php echo $this->form ?>
Run Code Online (Sandbox Code Playgroud)

结果目前是这样的:

- Your email address is invalid
- 'asda!!!' does not match the expected structure for a DNS hostname
- 'asda!!!' does not appear to be a valid local network name
Run Code Online (Sandbox Code Playgroud)

我想要知道的是:是否可以配置Zend _Validate _EmailAddress,使其只产生一个电子邮件无效的错误?通过'configure'我的意思是,不扩展类并用我自己的逻辑覆盖逻辑.

TIA.

sim*_*nes 10

Zend表单元素有各种方法可用于自定义消息.从文档中可以清楚地看出,但addErrorMessage()在验证失败时设置了一条自定义错误消息.

因此,您的示例如下所示:

$email = new Zend_Form_Element_Text('email');
$email->setLabel('Email')
      ->setRequired(true)
      ->addFilter('stringtrim')
      ->addValidator('emailAddress', true)
      ->addErrorMessage('Your email address is invalid');
$this->addElement($email);
Run Code Online (Sandbox Code Playgroud)

请参阅http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators.errors

  • 它可能会让人感到困惑.. $ email-> addError($ message)会设置一个错误并标记为无效,但$ email-> addErrorMessage($ message)似乎只是设置了消息,它会覆盖默认消息,并且不会t设置错误! (2认同)