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

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

$element->setRequired(true);

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

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

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

Ответы [ 5 ]

3 голосов
/ 10 октября 2008

По умолчанию 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!')));
3 голосов
/ 30 августа 2008

Я сделал это так (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);

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

2 голосов
/ 25 ноября 2008

Добавьте валидатор 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), чтобы локализовать сообщение об ошибке при его печати на странице.

1 голос
/ 29 августа 2008

Изменить сообщение об ошибке .

0 голосов
/ 29 августа 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...