在Zend_Form里,如何避免Zend_Validate_Email从生成多个错误?(In a Z

2019-06-28 07:32发布

我建立它作为一个登录表单要求的电子邮件地址和密码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)'
        )
    ))),
));

在控制器我直接传递形式进入视图:

// WPMail_AuthController::loginAction()
$this->view->form = $form;

并在视图,它直接回显:

// views/scripts/auth/login.phtml
<?php echo $this->form ?>

其结果是目前是这样的:

- 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

我想想知道的是:是否有可能配置的Zend _验证_ EmailAddress的这样一种方式,它只能产生一个单一的电子邮件无效的错误? 通过“配置”我的意思是,没有扩展类并覆盖与我自己的逻辑。

TIA。

Answer 1:

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

见http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators.errors



Answer 2:

看看这个教程的布雷迪帕德里克使用Zend_Form

具体地可参考“第4步:处理错误消息使用的定制的装饰。”



Answer 3:

由于这些消息是由一个验证器产生的,我不认为这是可能:-(

Zend_Validate_EmailAddress::isValid方法完成了所有的验证,对整体产生的错误,它似乎。

一个“哈克”的解决办法是迭代,在您的控制器上的误差,并删除所有但第一个,对于拥有一个以上每场......但我真的不喜欢的那个声音.. 。


你可以,当然,比继承和修改默认行为......但是,你说你不想这样做,所以...


不过,如果我错了,有一种方法,我很好奇;-)



文章来源: In a Zend_Form, how to avoid Zend_Validate_Email from generating multiple errors?