9

我正在构建一个 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 _Validate _EmailAddress 配置为只产生一个电子邮件无效错误?我所说的“配置”是指不扩展类并用我自己的逻辑覆盖逻辑。

TIA。

4

3 回答 3

10

Zend Form Element 有多种方法可以用来定制消息。从文档中不是很清楚,但是 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

于 2009-08-08T12:46:13.713 回答
3

查看Pádraic Brady 关于使用Zend_Form.

特别是“第 4 步:使用自定义装饰器处理错误消息”部分。

于 2009-08-06T17:48:00.900 回答
1

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

Zend_Validate_EmailAddress::isValid方法执行所有验证,似乎生成了一个整体的错误。

一个“hacky”解决方案是在您的控制器中迭代错误,并删除除第一个之外的所有字段,每个字段都有一个以上......但我真的不喜欢这样的声音...... .


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


不过,如果我错了,并且有办法,我很好奇;-)

于 2009-08-06T16:28:11.017 回答