Data :: FormValidator печатает hashref вместо строки для неверных данных - PullRequest
0 голосов
/ 11 апреля 2011

Мы разрабатываем приложение Catalyst, и мой коллега начал внедрять проверку формы с помощью Catalyst::Plugin::FormValidator, который обеспечивает ярлык для Data::FormValidator.

Проверка прошла успешно, и отображение пропущенных записей работает. Но при отображении сведений о несоответствующих ограничениях страница содержит хэш-ссылку типа HASH(0x784d80).

Это хеш, который мы используем для настройки валидатора (все примеры кода созданы для тестирования FormValidator в первую очередь):

{
    required => [qw/email age sex/],
    optional => [qw/city name/],
    filters  => [qw/trim/],

    constraints => {
        name => sub { length $_[1] >= 2 },
        sex => sub  { $_[1] =~ /^(male)|(female)$/},
        age => sub { $_[1] =~ /^[0-9]{1,2}$/ },
        email => sub { Email::Valid->address(lc($_[1])) },
        city => sub { length $_[1] >= 5 },
    },

    msgs => {
        invalid => {
            field => {
                email => 'no valid e-mail address',
                age => 'no valid age between 01 and 99',
                },

                default => 'contains an invalid value',
            },

        missing => 'missing!',
    },

}

Вот как мы читаем значения:

    <tr>
        <td>E-mail address:</td>
        <td><input type="text" name="email" value="[% email %]" />* [% c.form.msgs.email %]</td>
    </tr>

Для пропущенных полей все работает нормально. Для недопустимых полей значение invalid => просто распечатывается. Если установлено значение invalid => "THIS IS INVALID!", строка печатается, а если установлено значение invalid => {}, то хеш-адрес печатается как, например, HASH(0x784d80) (даже для пустого хэша).

Может кто-нибудь объяснить, почему это так? Мы используем текущую версию 4.66 Data::FormValidator из CPAN.

Обновление: Путем сброса [% c.forms %] мой коллега мог убедиться, что валидность полей определена правильно. Просто строка установлена ​​неправильно, и мы не знаем почему.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2015

Ключ msgs->{invalid} для параметров проверки формы - это хеш. Это должна быть строка :

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

msgs => {
    ...

    # Default invalid message, default's to "Invalid"
    invalid => 'Problematic!',

    ...
}

Вы должны иметь возможность использовать ключ constraints в хэше msgs для каждого сообщения об ошибке недопустимого поля:

constraints => {
    'date_and_time' => 'Not a valid time format',
    # ...
}

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

0 голосов
/ 11 апреля 2011

Это опечатка в вашем HTML:

[% c.form.msgs.email %]

следует читать

[% c.form.msgs.invalid.field.email %]
...