Zend_Form -> Приятно изменить setRequired () проверить сообщение - PullRequest
26 голосов
/ 20 января 2009

Скажем, я создаю текстовый элемент, подобный этому:

$firstName = new Zend_Form_Element_Text('firstName');
$firstName->setRequired(true);

Какой лучший способ изменить сообщение об ошибке по умолчанию:

Значение пустое, но непустое значение требуется

к пользовательскому сообщению? Я где-то читал, что для замены сообщения просто используйте addValidator (..., вместо (НЕТ setRequired) , например:

$firstName = new Zend_Form_Element_Text('firstName');
$firstName->addValidator('NotEmpty', false, array('messages'=>'Cannot be empty'));

но в моем тестировании это не работает - оно вообще не проверяется - оно пройдет с пустым текстовым полем. Использование обоих (addValidator ('NotEmp .. + setRequired (true) )) в то же время тоже не работает - он дважды проверяет , выдавая два сообщения об ошибках.

Есть идеи?

Спасибо!

Ответы [ 10 ]

19 голосов
/ 20 января 2009

Более простой способ установить это "для всего сайта" - это возможно сделать следующее при загрузке или, возможно, с базовым 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);
?>
16 голосов
/ 20 января 2009

Дайте этому шанс:

$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, он будет проверять все методы.

10 голосов
/ 14 ноября 2012

Zend_Form устанавливает требуемую ошибку проверки как 'isEmpty', поэтому вы можете переопределить ее сообщение с помощью setErrorMessages (). Например:

//Your Required Element
$element->setRequired(true)->setErrorMessages(array(
'isEmpty'=>'Please fill this field'
));

У меня сработало, используя ZF 1.11

9 голосов
/ 20 января 2009

Попробуйте

->addValidator('Digits', false);

или

->addValidator('Digits');

Вы предполагаете, что для проверки цифр в любом случае должна быть длина строки.

Кроме того, мне нравится делать некоторые пользовательские сообщения об ошибках как это:

$firstName->getValidator('NotEmpty')->setMessage('Please enter your first name');

Это позволяет вам «получить» валидатор, а затем «установить» его свойства.

5 голосов
/ 12 августа 2009

Попробуйте следующее.

$subjectElement->setRequired(true)->addErrorMessage('Please enter a subject for your message');

Это сработало от меня.

1 голос
/ 11 августа 2010

если поставить:

$element->setRequired(false);

проверки не работают вообще, вы должны определить:

$element->setAllowEmpty(false);

, чтобы получить правильное поведение валидаций.

1 голос
/ 26 октября 2009

Попробуйте это ..

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

Устанавливает пользовательское сообщение об ошибке только для валидатора цифр.

1 голос
/ 20 января 2009

Но попробуйте это:

$firstName->setRequired(true)
          ->addValidator('NotEmpty', false, array('messages' => 'bar'))
          ->addValidator('Alpha', false, array('messages'=>'Must contain only letters'));

Если оставить пустым и отправить, будет выдано два сообщения bar & '' - пустая строка . Это то второе сообщение, которое приходит от setRequired (true), вот в чем проблема

0 голосов
/ 22 марта 2011

используйте переводчик Zend с zend_validate.php из

ZendFramework-1.11.3\resources\languages\en\Zend_Validate.php and then modify this file how you need

, а затем измените его в соответствии с вашими потребностями

0 голосов
/ 20 января 2009

Одна маленькая проблема. Этот код:

$zipCode->setLabel('Postal Code')
        ->addValidator('StringLength', true, array( 5, 5 ) )
        ->addErrorMessage('More than 5')
        ->addValidator('Digits', true)
        ->addErrorMessage('Not a digit');

Сгенерирует оба сообщения об ошибке, если любая из проверок завершится неудачно. Разве не должен остановиться после первого сбоя?

...