2012-05-01 54 views
0

我在我的數據庫中的城鎮/城市字段上使用了一些簡單驗證。這已在模型中應用。正如你可以看到兩個領域,城市和城鎮,需要最少3個字符的長度,不能爲空。CakePHP模型驗證,檢查1可能的字段2有文本存在

然而,當人們填寫這個領域的形式,他們將有一個城鎮或城市,而不是兩個。如何在驗證中創建一個檢查,以便只有這些字段中的一個必須完成?我顯然不能'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' 
     ) , 

有什麼建議?

+0

看到[這篇文章](http://stackoverflow.com/questions/9719033/validation-for-at-least - 酮的電話號碼,被要求的功能於CakePHP的) – Ross

回答

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')) 
    ) 
) 
); 

基本上,它會檢查來自字段您在第二個PARAM傳遞(在這種情況下,數組的值,array('town')會檢查鎮域。如果該值是不是空的,它會刪除任何驗證錯誤在城市,因此允許它通過規則需要最後去驗證錯誤被刪除