在DBIx :: Class中验证行的数据的首选方法是什么?

时间:2012-05-09 23:10:50

标签: perl validation dbix-class

我需要在存储到数据库(DBIx::Class)之前验证Web应用程序的多个控制器中的传入数据。基本上,我需要使用回调(匿名子)验证每列的值。我最初想过在每个控制器中使用Params::Validate。但这种方法有两个问题:

  1. 没有简单的方法来处理验证错误 Params::Validate,因为它只是在第一个带有错误字符串的无效参数上死掉。

  2. 我必须为所有控制器中的每一列复制验证逻辑     违反DRY原则。

  3. 我认为最好的方法是使验证逻辑成为模型的一部分。在DBIx::Class中执行此操作的首选方法是什么?

2 个答案:

答案 0 :(得分:1)

我不确定您要验证数据的具体内容和确切方式,但您是否尝试使用DBIx::Class::Validation来满足您的需求?它应该适合。

答案 1 :(得分:1)

要向列添加验证回调,请在Result类中使用add_columns,例如

__PACKAGE__->add_columns(
    '+mycolumn' => {
        validate => sub {
            my ($schema, $val) = @_;
            # validate $val, possibly using $schema
        },
    },
    ...
);

为方便使用这些回调,您可以创建DBIx::Class сomponent