Как я могу настроить сообщения об ошибках Zend_Form Regex? - PullRequest
4 голосов
/ 31 марта 2010

У меня есть следующий код:

    $postcode = $form->createElement('text', 'postcode');
    $postcode->setLabel('Post code:');
    $postcode->addValidator('regex', false, 
        array('/^[a-z]{1,3}[0-9]{1,3} ?[0-9]{1,3}[a-z]{1,3}$/i'));
    $postcode->addFilters(array('StringToUpper'));
    $postcode->setRequired(true);

Создает поле ввода в форме, устанавливает правило проверки регулярных выражений и работает просто отлично.

Проблема в том, что сообщение об ошибке, отображаемое при вводе недопустимого почтового индекса, выглядит так:

'POSTCODE' does not match against pattern
    '/^[a-z]{1,3}[0-9]{1,3} ?[0-9]{1,3}[a-z]{1,3}$/i'

(где вход был POSTCODE)

Как я могу изменить это сообщение, чтобы оно было более дружелюбным?

Ответы [ 3 ]

5 голосов
/ 31 марта 2010

Я думаю, что вы помните, вы можете установить сообщение об ошибке в Валидаторе:

$postcode = $form->createElement('text', 'postcode');
$postcode->setLabel('Post code:');
$postcode->addValidator('regex', false, array(
    'pattern' => '/^[a-z]{1,3}[0-9]{1,3} ?[0-9]{1,3}[a-z]{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);

Если это не сработает, попробуйте

  • setErrorMessages (array $ messages) : добавить несколько сообщений об ошибках для отображения в ошибках проверки формы, переписывая все ранее установленные сообщения об ошибках.
1 голос
/ 31 марта 2010

Если вы определяете свой валидатор как внешнюю переменную, используйте 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 и просто передать ключ 'messages' в качестве параметра вашему валидатору:

$formElement->addValidator(array(
  'alnum', false, array('messages' => array(
     Zend_Validate_Alnum::INVALID => 'my message'
   ))
));

Это приведет к внутреннему запуску метода setMessages () , определенного в Zend_Validate_Abstract, и по сути просто к сокращению / экономии времени, определенному для Zend_Form.

Примечание: в Руководстве по ZF есть специальный раздел , касающийся сообщений проверки.

0 голосов
/ 02 апреля 2012

Вы можете использовать оригинальный валидатор почтового индекса 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'
        )
);
...