Zend_Form → Замечательно изменить setRequired() проверить сообщение
Скажем, я создаю текстовый элемент следующим образом:
$firstName = new Zend_Form_Element_Text('firstName');
$firstName->setRequired(true);
Каков наилучший способ изменить сообщение об ошибке по умолчанию:
Значение пустое, но непустое значение требуется
к пользовательскому сообщению? Я где-то читал, что для замены сообщения просто используйте addValidator (..., вместо этого (NO setRequired), например:
$firstName = new Zend_Form_Element_Text('firstName');
$firstName->addValidator('NotEmpty', false, array('messages'=>'Cannot be empty'));
но в моем тестировании это не сработает - он не проверяется вообще - он пройдет с пустым текстовым полем. Использование обоих (addValidator ('NotEmp.. + setRequired (true)) одновременно не работает - он дважды проверяет, выдавая два сообщения об ошибках.
Любые идеи?
Спасибо!
Ответы
Ответ 1
Более простой способ установить этот "весь сайт" - это, возможно, сделать следующее в бутстрапе или, возможно, в базе zend_controller:
<?php
$translateValidators = array(
Zend_Validate_NotEmpty::IS_EMPTY => 'Value must be entered',
Zend_Validate_Regex::NOT_MATCH => 'Invalid value entered',
Zend_Validate_StringLength::TOO_SHORT => 'Value cannot be less than %min% characters',
Zend_Validate_StringLength::TOO_LONG => 'Value cannot be longer than %max% characters',
Zend_Validate_EmailAddress::INVALID => 'Invalid e-mail address'
);
$translator = new Zend_Translate('array', $translateValidators);
Zend_Validate_Abstract::setDefaultTranslator($translator);
?>
Ответ 2
Сделайте снимок:
$firstName = new Zend_Form_Element_Text('firstName');
$firstName->setLabel('First Name')
->setRequired(true)
->addValidator('NotEmpty', true)
->addErrorMessage('Value is empty, but a non-empty value is required.');
Ключ состоит в том, что "true" на валидаторе, если вы установите его в true, он убьет остальные проверки после него. Если вы добавите несколько методов проверки, но установите значение false, оно будет проверять все методы.
Ответ 3
Try
->addValidator('Digits', false);
или
->addValidator('Digits');
Вы предполагаете, что для проверки Digits он должен иметь длину строки в любом случае.
Кроме того, мне нравится делать некоторые сообщения об ошибках, например:
$firstName->getValidator('NotEmpty')->setMessage('Please enter your first name');
Это позволяет вам "получить" валидатор, а затем "установить" его свойства.
Ответ 4
Zend_Form устанавливает требуемую ошибку проверки как "isEmpty", поэтому вы можете переопределить ее сообщение с помощью setErrorMessages(). Например:
//Your Required Element
$element->setRequired(true)->setErrorMessages(array(
'isEmpty'=>'Please fill this field'
));
Это сработало для меня, используя ZF 1.11
Ответ 5
Попробуйте следующее.
$subjectElement->setRequired(true)->addErrorMessage('Please enter a subject for your message');
Это сработало для меня.
Ответ 6
Но попробуйте следующее:
$firstName->setRequired(true)
->addValidator('NotEmpty', false, array('messages' => 'bar'))
->addValidator('Alpha', false, array('messages'=>'Must contain only letters'));
Если оставить пустым и отправленным, он даст две строки сообщений, а '' - пустая строка. Его второе сообщение, которое исходит от setRequired (true), которое вызывает проблему
Ответ 7
Попробуйте это.
$ausPostcode = new Zend_Form_Element_Text('aus_postcode'); $ausPostcode->setLabel('Australian Postcode')
->setRequired(true)
->addValidator('StringLength', false, array(4, 4))
->addValidator(new Zend_Validate_Digits(), false)
->getValidator('digits')->setMessage('Postcode can only contain digits');
Это устанавливает настраиваемое сообщение об ошибке только для валидатора цифр.
Ответ 8
если вы положили:
$element->setRequired(false);
проверки не работают вообще, вы должны определить:
$element->setAllowEmpty(false);
чтобы получить правильное поведение валидаций.
Ответ 9
Один маленький вопрос. Этот код:
$zipCode->setLabel('Postal Code')
->addValidator('StringLength', true, array( 5, 5 ) )
->addErrorMessage('More than 5')
->addValidator('Digits', true)
->addErrorMessage('Not a digit');
Генерирует оба сообщения об ошибках, если сбой проверки. Не предполагается ли остановиться после первого сбоя?
Ответ 10
используйте транслятор zend с zend_validate.php из
ZendFramework-1.11.3\resources\languages\en\Zend_Validate.php and then modify this file how you need
а затем измените его в соответствии с вашими потребностями