我需要在存储到数据库(DBIx::Class
)之前验证Web应用程序的多个控制器中的传入数据。基本上,我需要使用回调(匿名子)验证每列的值。我最初想过在每个控制器中使用Params::Validate
。但这种方法有两个问题:
没有简单的方法来处理验证错误
Params::Validate
,因为它只是在第一个带有错误字符串的无效参数上死掉。
我必须为所有控制器中的每一列复制验证逻辑 违反DRY原则。
我认为最好的方法是使验证逻辑成为模型的一部分。在DBIx::Class
中执行此操作的首选方法是什么?
答案 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。