Почему я не могу переопределить сообщение об ошибке проверки по умолчанию? - PullRequest
2 голосов
/ 18 июня 2009

Я использую Zend_Validate для проверки ввода формы (Zend Framework версия 1.8.2). По какой-то причине использование интерфейса Zend_Filter_Input, как описано здесь не работает:

$data = $_POST;
$filters = array('*' => array('StringTrim'));
$validators = array('driverName' => array('NotEmpty','messages' => 'This should override the default message but does not!'));
$inputFilter = new Zend_Filter_Input($filters,$validators,$data);
$messages = $inputFilter->getMessages();
debug($messages); //show me the variable contents

Вывод из debug($messages):

Array
(
    [driverName] => Array
        (
            [isEmpty] => You must give a non-empty value for field 'driverName'
        )

)

Что бы я ни делал, я не могу переопределить это сообщение. Если я использую валидатор напрямую, то есть ::1016*

$notEmpty = new Zend_Validate_NotEmpty();      
$notEmpty->setMessage('This WILL override the default validation error message');
if (!$notEmpty->isValid($_POST['driverName'])) {
    $messages = $notEmpty->getMessages();
    debug($messages);
}

Вывод из debug($messages):

Array
(
    [isEmpty] => Please enter your name
)

Итог. Я могу заставить работать валидаторы, но без преимуществ метода валидации Zend_Filter_Input я могу написать свой собственный класс валидации!

Кто-нибудь знает, почему это происходит и как это исправить?

Может ли это быть ошибкой?

Ответы [ 3 ]

5 голосов
/ 18 июня 2009

Ключу messages в массиве валидатора необходимо передать массив пар ключ / значение, где ключ - это константа сообщения проверки, а значение - ваше пользовательское сообщение об ошибке. Вот пример:

    $validators = array(

        'excerpt' => array(
            'allowEmpty' => true,
            array('StringLength', 0, Ctrl::getOption('blog/excerpt/length')), 
            'messages' => array(Zend_Validate_StringLength::TOO_LONG => 'The post excerpt must not exceed '.Ctrl::getOption('blog/excerpt/length').' characters.')
        ),

    );

Однако в вашем случае полученное вами сообщение об ошибке исходит от мета-команды allowEmpty Zend_Filter_Input. Это не совсем стандартный валидатор. Вы можете установить его так:

$options = array(
    'notEmptyMessage' => "A non-empty value is required for field '%field%'"
);

$input = new Zend_Filter_Input($filters, $validators, $data, $options);

// alternative method:

$input = new Zend_Filter_Input($filters, $validators, $data);
$input->setOptions($options);

Если вам нужно другое непустое сообщение для каждого поля, я бы рекомендовал установить allowEmpty => true и добавить валидатор NotEmpty с пользовательским сообщением.

Для справки, правильный ключ сообщения для валидатора NotEmpty: Zend_Validate_NotEmpty::IS_EMPTY

1 голос
/ 18 июня 2009

Аргумент MESSAGES принимает массив, а не строку. Попробуйте это:

$validators = array('driverName' => 
                     array('NotEmpty',
                           'messages' => array(
                                0 => 'This should override the default message but does not!'
                            )
                     )
              );
0 голосов
/ 13 августа 2009

Это ошибка, она в JIRA Zend Framework ...

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