0

Lithium PHP フレームワークを使用して、かなり複雑で動的なフォームを構築しています。

私はほとんど問題なくフォームを動作させ、MongoDB に保存しています。しかし、検証に問題があります。

単純な検証 (フィールドが空でないか数値かどうかのチェックなど) は正常に機能しています。しかし、フォーム内の多数のフィールドに依存するいくつかの複雑な検証を行う必要があります。

たとえば、ユーザーが質問を入力し、この質問に対して可能な回答を無制限に入力できるフォームがあります。各回答のフィールド ID は、"answer_1"、"answer_2"、"answer_3" などのようにリストされます。ユーザーは無制限の数の回答を追加できます。これは、クライアント側のフォームに余分な要素を挿入するいくつかの派手な JavaScript を介して行われます。

検証レベルでは、追加されたすべての回答が null でないことを確認したいと考えています。

Lithium 内に構築された「従来の」バリデーター機能を使用してこれを行いたいと思います。また、これをコントローラーレベルではなくモデルレベルで実行しています(-コントローラーレベルでこれを解決する回避策がありますが、モデルで「正しい」方法で実行したいと思います)

私が知る限り、問題はバリデータ ルールに 1 つの値しか渡せないことです。フォーム内のすべての値をバリデーターに返すだけです。もしそれができたら、私はゴールデンになるだろう。私がやろうとしていることの疑似コードは次のようになります。

        Validator::add('CorrectTest', function(&$value, $format = null, array $options = array()) {

        foreach ($_data as $key => $value) {
            if (stristr($key, "answer_")) {
                if ($value == "") {
                    return false;           
                }
            }
        }   

        return true;
    });

$_data 値が存在しないため、このコードは機能しません。完全に入力された「$_data」オブジェクトを Validator 関数に入れる方法を見つけられれば、これを機能させることができると思います。

助けてくれてありがとう

4

1 に答える 1

2

中身を見てみましょう$options。フォームからのすべての値を持つ「値」キーがそこにあるはずです。

だから試してみてください $_data = $options['values'];

于 2013-02-09T02:57:46.123 に答える