Zend Framework Validator message error
I have validator error translator connected with my Form
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);
}
}
Here is validator error translator code:
<?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' => 'Регистрируясь вы должны согласится с правилами',
);
How to change validation error message for custom element?
I'm trying to do it next way:
$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),
));
And this way too:
$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),
));
Anyway I get message from translator file, not my custom written mes开发者_Go百科sage text.
try
$validatorNotEmpty->setMessages(array('agreeRules'));
it will overwrite all messages, but in IS_EMPTY case it actually is one message
you could try the other approach, translate by value
remove Zend_Validate_NotEmpty::IS_EMPTY => 'Поле не может быть пустым',
$errors=array(
//values
'Value is required and cannot be empty' = > 'My translate',
'agreeRules' => 'My rules'
);
then
$validatorNotEmpty->setMessages(array(
Zend_Validate_NotEmpty::IS_EMPTY => 'agreeRules'));
now your translation get the text and translates it,
else the translator uses 'notEmpty' (Zend_Validate_NotEmpty::IS_EMPTY
is a string) for translation key and ignores the text 'agreeRules'
you can write this after adding form element
$form->formElementName->setDisableTranslator(true);
it will disable translate for your element
Please try below method to add element.
$this->addElement(
'checkbox',
'userAgreement',
array(
'label' => 'Регистрируясь, вы должны согласиться с правилами:',
'required' => true,
'validators' => array(
array('NotEmpty', true, array( 'messages' => array( Zend_Validate_NotEmpty::IS_EMPTY => 'agreeRules' ) ) ),
)
));
精彩评论