4

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

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

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

我认为最好的方法是将验证逻辑作为模型的一部分。这样做的首选方法是什么DBIx::Class

4

2 回答 2

1

我不确定您想验证什么以及如何验证您的数据,但您是否尝试使用DBIx::Class::Validation来满足您的需求?它应该适合。

于 2012-05-10T20:41:38.610 回答
1

将验证回调添加到add_columnsResult 类中使用的列元数据,例如

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

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

于 2012-05-13T20:22:30.357 回答