Zend框架验证器消息错误

3
我有一个与我的表单连接的验证器错误翻译器。
  class My_Lib_Forms_Form extends Zend_Form {

    public function init()

   {
       parent::init();

       $translator = new Zend_Translate('array', APPLICATION_PATH . '/languages/errors.php');

       // Задаем объект переводчика для формы
       $this->setTranslator($translator);    
   }
}

以下是验证错误的翻译器代码:

<?php
return $errors = array(
   Zend_Validate_Alnum::STRING_EMPTY => "Поле не может быть пустым",
   Zend_Validate_Date::INVALID_DATE => 'Значение не соответствует формату год-месяц-день',
   Zend_Validate_Date::INVALID => 'Неверная дата',
   Zend_Validate_Date::FALSEFORMAT => 'Значение не соответствует указанному формату',
   Zend_Validate_EmailAddress::INVALID_FORMAT => "asdasd",
   Zend_Validate_EmailAddress::INVALID_FORMAT => "Не верный формат адреса электронной почты. Введите почту в формате local-part@hostname",
   Zend_Validate_EmailAddress::INVALID_HOSTNAME => "'%hostname%' не верный домен для адреса электронной почты '%value%'",
   Zend_Validate_EmailAddress::INVALID_MX_RECORD => "'%hostname%' не имеет MX-записи об адресе электронной почты '%value%'",
   Zend_Validate_EmailAddress::DOT_ATOM => "'%localPart%' не соответствует формату dot-atom",
   Zend_Validate_EmailAddress::QUOTED_STRING => "'%localPart%' не соответствует формату quoted-string",
   Zend_Validate_EmailAddress::INVALID_LOCAL_PART => "'%localPart%' не верное имя для адреса электронной почты '%value%'",
   Zend_Validate_Int::NOT_INT => 'Значение не является целочисленным значением',
   Zend_Validate_NotEmpty::IS_EMPTY => 'Поле не может быть пустым',
   Zend_Validate_StringLength::TOO_SHORT => 'Длина введённого значения меньше чем %min% символов',
   Zend_Validate_StringLength::TOO_LONG => 'Длина введённого значения больше чем %max% символов',
   My_Lib_Validate_EqualInputs::NOT_EQUAL => 'Пароли не совпадают',
   My_Lib_Validate_Password::INVALID => 'Не верный формат пароля',
   My_Lib_Validate_Password::INVALID_LENGTH => 'Длина пароля должна быть от 7 до 30ти символов',
   Zend_Captcha_Word::BAD_CAPTCHA => 'Вы указали не верные символы',
   Zend_Captcha_Word::MISSING_VALUE => 'Поле не может быть пустым',
   'userAgreement' => 'Регистрируясь вы должны согласится с правилами',    
);

如何为自定义元素更改验证错误消息?

我尝试按照以下方式进行更改:

$validatorNotEmpty = new Zend_Validate_NotEmpty();
$validatorNotEmpty->setMessages(array(
           Zend_Validate_NotEmpty::IS_EMPTY  => 'agreeRules'));
$userAgreement = new Zend_Form_Element_Checkbox('userAgreement', array(
           'required'    => true,
           'label'       => 'Регистрируясь, вы должны согласиться с правилами:',            
           'validators'  => array($validatorNotEmpty),
       ));

还有这种方式:

$validatorNotEmpty = new Zend_Validate_NotEmpty();
$validatorNotEmpty->setMessage(  'Регистрируясь вы должны согласится с правилами',
           Zend_Validate_NotEmpty::IS_EMPTY);
$userAgreement = new Zend_Form_Element_Checkbox('userAgreement', array(
           'required'    => true,
           'label'       => 'Регистрируясь, вы должны согласиться с правилами:',            
           'validators'  => array($validatorNotEmpty),
       ));

无论如何,我收到的消息都来自翻译文件,而不是我自己编写的消息文本。


+1 表示您可以使用静态字段进行错误消息翻译。我之前没有想到过这一点。 - Janis Peisenieks
3个回答

2

尝试

   $validatorNotEmpty->setMessages(array('agreeRules')); 

它会覆盖所有消息,但在IS_EMPTY情况下,它实际上是一条消息。

您可以尝试另一种方法,按值翻译。

删除Zend_Validate_NotEmpty :: IS_EMPTY => 'Поле не может быть пустым',

$errors=array(
 //values
 'Value is required and cannot be empty' = > 'My translate',
 'agreeRules' => 'My rules'
);

那么

$validatorNotEmpty->setMessages(array(
       Zend_Validate_NotEmpty::IS_EMPTY  => 'agreeRules'));

现在你的翻译获取了文本并进行翻译,否则翻译器将使用“notEmpty”(Zend_Validate_NotEmpty :: IS_EMPTY是一个字符串)作为翻译键,并忽略文本“agreeRules”。


2
您可以在添加表单元素后编写此内容。
$form->formElementName->setDisableTranslator(true);

这将禁用您的元素翻译


1
请尝试以下方法添加元素。
$this->addElement(

          'checkbox',

          'userAgreement',

           array(
    'label'      => 'Регистрируясь, вы должны согласиться с правилами:',
    'required'   => true,
    'validators' => array(
        array('NotEmpty', true, array( 'messages' => array( Zend_Validate_NotEmpty::IS_EMPTY => 'agreeRules' ) ) ),
    )
));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接