0

データベースの町/都市フィールドで簡単な検証を使用しています。これはモデルに適用されています。両方のフィールドを見ることができるように、city と town には最小長 3 文字が必要であり、空にすることはできません。

しかし、人々がこのフィールドのフォームに入力すると、両方ではなく、町または都市が表示されます。これらのフィールドの 1 つだけを入力する必要があるように、検証でチェックを作成するにはどうすればよいですか? 両方のフィールドで 'allowEmpty' => true を明らかにできないので、どうすればこれを実装できますか?

検証規則:

       'town' => array(         
             'rule' => array('minLength', 3),                            
             'allowEmpty' => false,
             'message' => 'Must have town'
          ) ,

                 'city' => array(         
             'rule' => array('minLength', 3),                            
             'allowEmpty' => false,
             'message' => 'Must have city'
          ) ,

助言がありますか?

4

1 に答える 1

1

次のように、AppModel でカスタム検証ルールを作成できます。

function eitherOr(&$data, $orFields = array()) {
    foreach ($orFields as $orField => $orValue) {
        if (!empty($orValue)) {
            unset($this->validationErrors[key($data)]);
        }
    }
    return true;
}

次に、検証ルールに追加します。

var $validate = array(
  'town' => array(
    'empty' => array(
      'rule' => 'allowEmpty'
    ),
    // other rules
  ),
  'city' => array(
    // other rules
    'eitherOr' => array(
      'rule' => array('eitherOr', array('town'))
    )
  )
);

基本的に、2 番目のパラメーターで渡したフィールドの配列から値をチェックします (この場合はarray('town')、町フィールドをチェックします。値が空でない場合は、都市の検証エラーが削除されるため、 pass. 検証エラーが削除されるように、ルールは最後に行く必要があります。

于 2012-05-01T14:37:01.943 に答える