我们开发了一个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 => {}
,则打印hashref,例如HASH(0x784d80)
(即使是空哈希)。
有人可以解释为什么会这样吗?我们使用CPAN的Data::FormValidator
当前版本4.66。
更新:通过转储[% c.forms %]
,我的同事可以验证是否正确确定了字段的有效性。只是字符串设置错误,我们不知道为什么。
答案 0 :(得分:0)
你的HTML中的拼写错误:
[% c.form.msgs.email %]
应该阅读
[% c.form.msgs.invalid.field.email %]
答案 1 :(得分:0)
表单验证程序选项的msgs->{invalid}
键是一个哈希值。 It is meant to be a string:
这是一个更复杂的示例,展示了如何提供自己的默认消息字符串,以及为每个字段提供自定义消息以及处理多个约束:
msgs => { ... # Default invalid message, default's to "Invalid" invalid => 'Problematic!', ... }
对于每个无效的字段错误消息,您应该能够使用constraints
哈希中的msgs
密钥:
constraints => {
'date_and_time' => 'Not a valid time format',
# ...
}
但是,我目前也在尝试使用constraints
并且它没有任何效果,因此字段相关错误消息的功能可能实际上不存在。