2011-07-04 22 views
0

(CakePHP的新功能,所以這可能是一件顯而易見的事情,但我在搜索幾個小時後找不到解決方案 - 我猜是「或」的含糊性質。 ..)CakePHP驗證 - isUnique OR inList

我試圖修改現有CakePHP的驗證規則,它使用isUnique規則,這樣它會驗證用於滿足無論是isUnique規則或inList規則值。

上面的代碼:

'isUnique' => array(
    'rule' => 'isUnique' , 
    'message' => "We're sorry, but this QA number is already being used.", 
    'last' => TRUE, 
), 

我的(錯誤的)代碼:

'isUnique' => array(
    'rule' => array( 
    'isUnique' , 
    array('inList' , array('111213' , '141516' , '171819' , '202122')) 
) , 
    'message' => "We're sorry, but this number is already being used.", 
    'last' => TRUE, 
), 

因此,(像這樣簡單而定),你怎麼能串CakePHP的驗證規則連同「 OR「邏輯運算符?我可以看到,你可以應用一系列「AND」規則(對於特定問題的每個測試,並且如果通過該測試,則拒絕該值),但是「OR」規則讓我撓了撓頭......

任何幫助表示讚賞。

回答

2

你將不得不作出custom validation rule。在模型中加入這樣的:

public function isUniqueOrInList(array $data, array $list) { 
    return in_array(current($data), $list) || $this->isUnique($data); 
} 

然後宣告您的規則,如:

'rule' => array('isUniqueOrInList', array('111213', '141516', '171819', '202122')) 
+0

你是一個聖人!感謝您的幫助 - 我第一次進入CakePHP,所以我無能爲力。 –

+2

由於性能方面的原因,我會切換這兩個條件。後者不需要DB致電 – mark

+0

@mark好點。 – deceze