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 関数に入れる方法を見つけられれば、これを機能させることができると思います。
助けてくれてありがとう