Data :: FormValidator为无效数据打印hashref而不是string

时间:2011-04-11 12:32:02

标签: perl hash validation cpan catalyst

我们开发了一个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 %],我的同事可以验证是否正确确定了字段的有效性。只是字符串设置错误,我们不知道为什么。

2 个答案:

答案 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并且它没有任何效果,因此字段相关错误消息的功能可能实际上不存在。