2012-05-01 1 views
0

私のデータベースの町/市のフィールドで簡単な検証を行っています。これはモデルに適用されています。都市と町の両方のフィールドを見ることができるので、最低3文字の長さが必要です。空でもかまいません。CakePHPモデル検証、可能な2の1フィールドをチェックするとテキストが表示されます

しかし、このフィールドのフォームに人が記入すると、町や都市だけでなく、その両方が表示されます。これらのフィールドのうちの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' 
     ) , 

任意の提案ですか?

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

はその後、あなたの検証ルールに追加します。

+0

[this post](http://stackoverflow.com/questions/9719033/validation-for-at-least) -one-phone-number-is-in-cakephp) – Ross

答えて

1

あなたは、このような何かを、あなたのAppModelにカスタム検証ルールを作成することができます。

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

基本的に、それはあなたがこのような場合には(第2のparamに渡すフィールドの配列から値をチェックします、array('town')は、町のフィールドをチェックします。値が空でない場合、それは任意の検証を削除します市区町村のエラーが発生したため、合格を許可するようにルールを最後に変更する必要があります。

関連する問題