Мы разрабатываем приложение 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 %]
мой коллега мог убедиться, что валидность полей определена правильно. Просто строка установлена неправильно, и мы не знаем почему.