2012-05-09 35 views
4

我需要在存儲在數據庫(DBIx::Class)之前驗證Web應用程序的多個控制器中的傳入數據。基本上,我需要使用回調(匿名子)驗證每列的值。我最初考慮在每個控制器中使用Params::Validate。但這種方法有兩個問題:什麼是驗證DBIx :: Class中的行的數據的首選方法?

  1. 有沒有簡單的方法來處理驗證錯誤與 Params::Validate,因爲它只是在一個錯誤的字符串的第一個無效PARAM死亡。

  2. 我必須複製所有控制器中的每個列的驗證邏輯,其中 違反了DRY原則。

我認爲最好的辦法是使驗證邏輯成爲模型的一部分。 DBIx::Class最喜歡做什麼方法?

回答

1

要向列元數據中添加驗證回調,請在Result類中使用add_columns,例如,

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

爲了便於使用這些回調,您可以創建一個DBIx::Class сomponent

1

我不確定你想要驗證你的數據的是什麼以及你想要如何驗證你的數據,但是你是否嘗試使用DBIx::Class::Validation來滿足你的需求?它應該適合。

相關問題