Zend Framework: установка обязательного поля формы Zend_Form_Element, как мне изменить валидатор, используемый для обеспечения того, чтобы элемент не был пустым
-
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.
И пример использования был бы действительно великолепен.