У меня есть следующий код:
$ postcode = $ form-> createElement ('text', 'postcode'); $ postcode-> setLabel ('Почтовый код:'); $ postcode-> addValidator ('regex', false, array ('/ ^ [az] {1,3} [0-9] {1,3}? [0-9] {1,3} [az] {1,3} $ / i')); $ Postcode-> addFilters (массив ( 'StringToUpper')); $ Postcode-> setRequired (истина);
Он создает поле ввода в форме и задает правило проверки регулярных выражений и отлично работает.
Проблема в том, что сообщение об ошибке, которое оно выводит, когда пользователь вводит недопустимый почтовый индекс, таков:
«POSTCODE» не соответствует шаблону '/ ^ [az] {1,3} [0-9] {1,3}? [0-9] {1,3} [az] {1,3} $ / i'
(где вход был POSTCODE)
Как я могу изменить это сообщение, чтобы быть немного более дружелюбным?
Я думаю, что вы можете установить сообщение об ошибке в Validator:
$postcode = $form->createElement('text', 'postcode'); $postcode->setLabel('Post code:'); $postcode->addValidator('regex', false, array( 'pattern' => '/^[az]{1,3}[0-9]{1,3} ?[0-9]{1,3}[az]{1,3}$/i') 'messages' => array( 'regexInvalid' => "Invalid type given, value should be string, integer or float", 'regexNotMatch' => "'%value%' does not match against pattern '%pattern%'", 'regexErrorous' => "There was an internal error while using the pattern '%pattern%'" ) ); $postcode->addFilters(array('StringToUpper')); $postcode->setRequired(true);
Если это не сработает, попробуйте
Если вы определяете свой валидатор как внешнюю переменную, используйте setMessage () :
$validator = new Zend_Validate_Alnum(); $validator->setMessage('My custom error message for given validation rule', Zend_Validate_Alnum::INVALID); $formElement->addValidator($validator);
Как вы видите в примере выше валидатор для формы не отличается от других типов экземпляров Zend_Validate_ *.
Настройка сообщений проверки включает поиск документов API и определение константы сообщения для данной ошибки проверки (как и в случае Zend_Validate_Alnum :: INVALID). Конечно, если ваша среда IDE обеспечивает хорошее автозаполнение контекста, просто ввести класс проверки правильности может быть достаточно – поскольку константы сообщений в большинстве случаев очень понятны.
Другой способ – использовать магические методы Zend_Form и просто передать «сообщение» в качестве параметра для вашего валидатора:
$formElement->addValidator(array( 'alnum', false, array('messages' => array( Zend_Validate_Alnum::INVALID => 'my message' )) ));
Это внутренне инициирует метод setMessages (), определенный в Zend_Validate_Abstract, и, по существу, просто сокращенное время / время, заданное для Zend_Form.
NB: В руководстве ZF имеется специальный раздел, посвященный сообщениям проверки.
Вы можете использовать исходный почтовый индекс Zend
$user->addElement('text', 'postcode', array('label' => 'Postcode *', 'required' => true, 'class' => 'postcode_anywhere', "validators" => array( array("NotEmpty", false, array("messages" => array("isEmpty" => "Required *"),)), array('PostCode', false, array('locale' => 'en_GB') ) ), 'filters' => array(array('StringToUpper')), 'class' => 'text' ) );