2009-07-20 67 views
0

需要我有一大堆的名稱/電子郵件字段的在我的形式類似的這樣的表單字段中的一種:製作組在CakePHP中

data[Friend][0][name] 
data[Friend][1][name] 
data[Friend][2][name] 

data[Friend][0][email] 
data[Friend][1][email] 
data[Friend][2][email] 

我有一個自定義驗證規則,每個檢查是否填寫相應的字段。如果數據[朋友] [2] [名],然後數據[朋友] [2] [郵件]必須在充滿

僅供參考,繼承人什麼的兩條規則一個樣子:

我的表單驗證規則:(我有一個電子郵件驗證過,但是這無關緊要這裏)

'name' => array(
    'checkEmail' => array(
     'rule' => 'hasEmail', 
     'message' => 'You must fill in the name field', 
     'last' => true 
    ) 
) 

我的自定義規則代碼:

function hasEmail($data){ 
    $name = array_values($data); 
    $name = $name[0]; 
    if(strlen($name) == 0){ 
    return empty($this->data['Friend']['email']); 
    } 
    return true; 
} 

我需要它,以便對應該作爲填充至少。它可以是任何只要索引相對應的。

我無法想象,如果我將表單規則設置爲required或allowEmpty false,它將在所有空字段上失敗。我如何檢查1對的存在,如果存在,繼續?另外,我需要去除所有剩餘的空[Friend]字段,所以我的saveAll()不會保存一行空行,但我認爲我可以在控制器中使用提取來處理該部分。主要問題是這種驗證。謝謝。

回答

1

我會看看Model::beforeValidate回調(API)。

使用此回調輸出調試信息應該可以幫助您瞭解每次調用時觸發了多少次以及模型可以使用哪些數據。

有了這些信息,您可以在找到第一個匹配對時創建一個標誌,並篡改Model :: validates數組或Model :: data數組以繞過隨後的驗證嘗試。

至於您的最後一點,您可以使用Set::filter輕鬆刪除數據集中的空白字段。