2009-07-20 4 views
0

に必要な類似したフォームフィールドのグループの1つを作る:私はこのように私のフォームに名前/電子メールフィールドの束を持ってCakePHPの

data[Friend][0][name] 
data[Friend][1][name] 
data[Friend][2][name] 

など

data[Friend][0][email] 
data[Friend][1][email] 
data[Friend][2][email] 

など

対応するフィールドが入力されているかどうかを確認するカスタム検証ルールがあります。データ[フレンド] [2] [名]、データ[フレンド]は、[2] [メール]は記入しなければならない場合

FYI、HERESに二つの規則のどの一つは次のようになります。

私のフォーム検証をルール:(私もメールの検証を持っていますが、それはここでは無関係です)

'name' => array(
    'checkEmail' => array(
     'rule' => 'hasEmail', 
     'message' => 'You must fill in the name field', 
     'last' => true 
    ) 
) 

マイカスタムルールコード:私はペアの1のように充填する必要があるようにそれを行う必要があり

function hasEmail($data){ 
    $name = array_values($data); 
    $name = $name[0]; 
    if(strlen($name) == 0){ 
    return empty($this->data['Friend']['email']); 
    } 
    return true; 
} 

最小。インデックスが対応している限り、任意の値にすることができます。

フォームルールを必須に設定するか、allowEmpty falseに設定するかのように、すべての空のフィールドで失敗するような方法はありません。 1ペアの存在を確認する方法はありますか?

また、私のsaveAll()は空の行のロードを保存しないように、残りの空の[フレンド]フィールドをすべて削除する必要がありますが、私のコントローラのextractを使ってその部分を処理できると思います。主な問題はこの検証です。ありがとう。

答えて

1

私はModel::beforeValidateコールバック(API)を調べます。

このコールバックを使用してデバッグ情報を出力すると、呼び出しごとに発生する回数とモデルで使用できるデータを把握するのに役立ちます。

この情報を使用すると、最初に一致するペアが見つかったときにフラグを作成し、その後の検証を回避するためにModel :: validates配列またはModel :: data配列のいずれかを改ざんすることができます。

最後の点として、Set::filterを使用すると、データセットから空白のフィールドを簡単に削除できます。

関連する問題