zend表单元素上的zend验证问题

时间:2010-10-21 19:00:59

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

我以前有这个表单元素来验证电子邮件并在格式无效时显示错误消息:

  $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,因为当电子邮件alrady存在时,这会显示“无效的电子邮件”。

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

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

在我的表单元素上添加了

$ email_users-> addValidator($ emailValidator)

没有相同的结果。我最接近的是做'消息'=>数组(Zend_Validate_EmailAddress :: INVALID_FORMAT =>'无效的电子邮件')这会显示msg,当我输入类似'email @'或'email'的内容时,如果我输入'email @ host',它会显示3个关于主机名的错误,dns和localnetwork,当我使用setMessages('Error')时它们没有显示(只显示'错误'),

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

Zend validators and error messages: addValidator and addErrorMessage

简而言之,试试这个:

'messages' => 'Email already exists'

而不是使用数组。

答案 1 :(得分:0)

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

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

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