4

DB に保存する前に、Web アプリのいくつかのコントローラーで受信データを検証する必要があります ( DBIx::Class)。基本的に、コールバック (匿名サブ) を使用して各列の値を検証する必要があります。Params::Validate最初は各コントローラーで使用することを考えました。しかし、このアプローチには 2 つの問題があります。

  1. で検証エラーを処理する簡単な方法はありません Params::Validate。最初の無効なパラメーターでエラー文字列が発生するだけです。

  2. すべてのコントローラーのすべての列に対して検証ロジックを複製する必要があり、これは DRY の原則に違反しています。

最良の方法は、検証ロジックをモデルの一部にすることだと思います。でこれを行うための好ましい方法は何DBIx::Classですか?

4

2 に答える 2

1

データを何をどの程度正確に検証するかはわかりませんが、ニーズに合わせてDBIx :: Class :: Validationを使用しようとしましたか?収まるはずです。

于 2012-05-10T20:41:38.610 に答える
1

検証コールバックを列のメタデータに追加するadd_columnsには、Result クラスで使用します。

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

これらのコールバックの使用を容易にするために、DBIx::Class コンポーネントを作成できます。

于 2012-05-13T20:22:30.357 に答える