代码之家  ›  专栏  ›  技术社区  ›  kander

在Zend_表单中,如何避免Zend_验证电子邮件产生多个错误?

  •  9
  • kander  · 技术社区  · 16 年前

    我正在构建一个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;
    

    在视图中,它直接是echo'd:

    // 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 _ 验证 γ 电子邮件地址只会产生一个电子邮件无效错误?“configure”的意思是,不扩展类,也不使用自己的类覆盖逻辑。

    短暂性脑缺血发作

    3 回复  |  直到 16 年前
        1
  •  10
  •   simonrjones    16 年前

    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

        2
  •  3
  •   Bill Karwin    16 年前

    看看这个 tutorial 作者P_ Zend_Form .

    特别是“步骤4:使用自定义修饰器处理错误消息”一节。

        3
  •  1
  •   Pascal MARTIN    16 年前

    因为这些消息是由 验证器,我认为不可能 :

    这个 Zend_Validate_EmailAddress::isValid 方法完成了所有验证,似乎在整体上生成了错误。

    一个“hacky”解决方案是在控制器中迭代错误,并删除除第一个以外的所有错误,针对每个有多个字段…但我不喜欢那种声音…


    当然,您可以继承than并修改默认行为…但你说你不想那样做,所以…


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

    推荐文章