Zend Framework: установка обязательного поля формы Zend_Form_Element, как мне изменить валидатор, используемый для обеспечения того, чтобы элемент не был пустым

StackOverflow https://stackoverflow.com/questions/34848

  •  09-06-2019
  •  | 
  •  

Вопрос

При использовании Zend_Form единственный способ проверить, что ввод не оставлен пустым, - это сделать

$element->setRequired(true);

Если это не задано, а элемент пуст, мне кажется, что проверка элемента не выполняется.

Если я использую setRequired () , элемент автоматически получает стандартный валидатор NotEmpty. Дело в том, что сообщение об ошибке с этим валидатором отстой, «Значение пусто, но требуется непустое значение». Я хочу изменить это сообщение. На данный момент я сделал это, изменив класс Zend_Validate_NotEmpty , но это немного глупо.

В идеале я хотел бы иметь возможность использовать свой собственный класс (производный от Zend_Validate_NotEmpty ) для выполнения проверки не пустых значений.

Это было полезно?

Решение

Я сделал это так (ZF 1.5):

$name = new Zend_Form_Element_Text('name');
$name->setLabel('Full Name: ')
     ->setRequired(true)
     ->addFilter('StripTags')
     ->addFilter('StringTrim')
     ->addValidator($MyNotEmpty);

Итак, addValidator () является интересной частью. Сообщение помещается в «Файл сообщений об ошибках». (для объединения всех пользовательских сообщений в один файл):

$MyNotEmpty = new Zend_Validate_NotEmpty();
$MyNotEmpty->setMessage($trans->translate('err.IS_EMPTY'),Zend_Validate_NotEmpty::IS_EMPTY);

надеюсь, это поможет ...

Другие советы

По умолчанию setRequired (true) сообщает isValid () добавить проверку NonEmpty , если она еще не существует . Поскольку эта проверка не существует до вызова isValid (), вы не можете установить сообщение.

Самое простое решение - просто вручную добавить проверку NonEmpty перед вызовом isValid () и установить соответствующее сообщение.

$username = new Zend_Form_Element_Text('username');
$username->setRequired(true)
         ->addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Empty!')));

Добавьте валидатор NotEmpty и добавьте свое собственное сообщение:

// In the form class:
$username = $this->createElement('text', 'username');
$username->setRequired();  // Note that this seems to be required!
$username->addValidator('NotEmpty', true, array(
    'messages' => array(
        'isEmpty' => 'my localized err msg')));

Обратите внимание , что валидатор NotEmpty, похоже, не сработает, если только вы не вызвали setRequired () для элемента.

В контроллере (или где-либо еще) вызовите $ form- > setTranslator ($ yourTranslator), чтобы локализовать сообщение об ошибке при его печати на странице.

Насколько я вижу, Изменение сообщения об ошибке не может изменить сообщение об определенной ошибке. Кроме того, из руководства видно, что это функция, принадлежащая Zend_Form, но я получаю метод, не найденный при использовании его в экземпляре Zend_Form.

И пример использования был бы действительно великолепен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top