Подтвердить что ты не робот

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)) одновременно не работает - он дважды проверяет, выдавая два сообщения об ошибках.

Любые идеи?

Спасибо!

4b9b3361

Ответ 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

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