1

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

  $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'),

提前致谢。

4

2 回答 2

0

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

Zend 验证器和错误消息:addValidator 和 addErrorMessage

简而言之,试试这个:

'messages' => 'Email already exists'

而不是使用数组。

于 2010-10-21T21:14:37.747 回答
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>") )
);

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

于 2013-02-13T10:20:37.920 回答