2013-06-20 49 views
2

如果陣列中的一組驗證器失敗,Yii內置驗證將返回無效狀態,例如Yii Validation;將驗證器與「或」邏輯組合

例如,

array( 
    array('A', 'required'), 
    array('B', 'required') 
) 

如果A或B爲空,將返回無效。 (與邏輯)

我想結合這些驗證器,以便它將返回無效只有當所有個別驗證器返回無效(或邏輯)。 上述示例僅在A和B都爲空的情況下才會返回無效。

有沒有一個通用的內置方式來做到這一點?

如果不是我期待有擴展庫來處理類似以下內容:

array(
    array('', 'COrValidator', 
    array('A', 'required'), 
    array('B', 'required') 
) 
) 
+2

我想說這是另一回合。你是條件*「如果A或B是空的」*已經暗示目前它是驗證器的或組合。如果A或B失敗,驗證失敗。你想要一個AND邏輯。這不是核心內容,所以你的假設是正確的。你必須編寫一個自定義的'AndValidator'。 –

+1

只有當你使用負邏輯。說通過是真的,失敗是錯誤的。對於所需的驗證器,空的是失敗或錯誤情況。如果A爲真且B爲真,則A和B爲真,但如果A爲假或B爲假,則A和B爲假,或者使用所需的驗證器術語A和B在A爲空或B爲空時失敗。所以它看起來像Arth是正確的! – jmarkmurphy

+0

@Michael,我正在查看jmarkmurphy指出的通行條件。由於自定義驗證程序將驗證語句X或語句Y可能爲真的情況,因此我將其稱爲OrValidator。 – Arth

回答

0

您可能希望創建一個AnyValidValidator,這樣就可以做這樣的事情:

array(
    array('attribute1, attibute2', 'anyValid', array('required')), 
); 

array(
    array('', 'COrValidator', 
    array('A', 'required'), 
    array('B', 'required') 
) 
) 

的問題是,沒有顯著modifi如果驗證器功能不存在,COrValidator驗證器將不會應用於任何屬性(不指定任何屬性)。

+0

一個有趣的解決方案,但我會需要更通用的東西,以便驗證X可能涉及所需和驗證Y可能是一個範圍,例如。 – Arth

+0

你有沒有具體的要求,或者這只是猜測? – jmarkmurphy

+0

這是一個通用要求(即多個複雜的驗證場景,在這個場景中會使用這個場景),所以不只是猜測;但可以考慮使用框架不同部分的另一種方法! – Arth