【问题标题】:Problem with zend validate on zend form elementzend表单元素上的zend验证问题
【发布时间】:2010-10-21 19:00:58
【问题描述】:

我曾经使用此表单元素来验证电子邮件并在格式无效时显示错误消息:

  $email_users = new Zend_Form_Element_Text('email_users');
  $email_users->setLabel('Email:')
                      ->setRequired(false)
                      ->addFilter('StripTags')
                      ->addFilter('StringTrim')
                      ->addValidator('EmailAddress')
                      ->setErrorMessages(array('messages' => 'Invalid Email'));

setErrorMessages 工作正常,因为这是我需要的唯一验证,所以它用我的自定义错误消息替换了所有错误消息,现在我必须添加另一个验证以查看它是否已经存在于我的数据库中:

  $email_users = new Zend_Form_Element_Text('email_users');
  $email_users->setLabel('Email:')
                      ->setRequired(false)
                      ->addFilter('StripTags')
                      ->addFilter('StringTrim')
                      ->addValidators(array(
                          array('EmailAddress', true,
                              array(
                                  'messages' =>
                                      array(Zend_Validate_EmailAddress::INVALID => 'Invalid Email')
                                  )
                          ),
                          array('Db_NoRecordExists', true,
                              array(
                                  'messages' =>
                                    array(Zend_Validate_Db_NoRecordExists::ERROR_RECORD_FOUND => 'Email already exists'),
                                  'table' => 'users',
                                  'field' => 'email_users')
                          )));

功能很好,问题是当电子邮件无效时,它现在向我显示默认的 zend 验证消息,但当它存在时,它确实向我显示我的自定义消息。有没有办法以这种方式归档以前的功能? (替换所有无效的电子邮件)我不能使用 setErrorMessages,因为当电子邮件已经存在时,这会显示“无效电子邮件”。

我尝试使用 'messages' => 'Error' 但没有任何反应(没有错误但显示默认消息),我尝试了:

$emailValidator = new Zend_Validate_EmailAddress(); $emailValidator->setMessages('无效邮件');

我在表单元素上添加了

$email_users->addValidator($emailValidator)

没有相同的结果。我得到的最接近的是 'messages' => array(Zend_Validate_EmailAddress::INVALID_FORMAT => 'Invalid email') 当我输入类似 'email@' 或 'email' 但如果我输入 'email@host ' 它向我显示了关于主机名、dns 和本地网络的 3 个错误,当我使用 setMessages('Error') 时它们不会显示(只显示'Error'),

提前致谢。

【问题讨论】:

    标签: zend-framework zend-form zend-form-element zend-validate


    【解决方案1】:

    我发布了一个答案,解释了所有不同的错误消息设置功能如何在这里工作,

    Zend validators and error messages: addValidator and addErrorMessage

    简而言之,试试这个:

    'messages' => 'Email already exists'

    而不是使用数组。

    【讨论】:

    • 嗨,阿德里安,我根据你的帖子更新了我的问题
    • 看起来 messages = string 方法不起作用,因为 EmailAddress 验证器会覆盖它,以便将某些验证代理到主机名验证器。但适用于所有(大多数?)其他验证器。
    【解决方案2】:

    你必须像这样写验证器..

    $email_users->addValidator(
        'EmailAddress', 
        true, 
        array( 'messages' => array( 'emailAddressInvalidFormat' => "Email Address is Not Valid... !<br>", "emailAddressInvalidHostname"=>"Email Address is Not Valid... !<br>", "hostnameUnknownTld"=>"Email Address is Not Valid... !<br>","hostnameLocalNameNotAllowed"=>"Email Address is Not Valid... !<br>") )
    );
    

    在所有无效电子邮件地址错误的情况下,必须显示“电子邮件地址无效...!”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多