2011-04-06 77 views
8

我目前正在對模型的beforeValidate()回調中的表單進行一些額外驗證。CakePHP模型 - > invalidate不顯示錯誤

我有以下代碼:

function beforeValidate(){ 
    $i = 0; 
    foreach($this->data['CapitalCategory'] as $capital_category){ 
     if(!empty($capital_category['value'])){ 
      $this->invalidate('CapitalCategory.'.$i.'.points', 'error!'); 
       return false; 
      } 

     $i++; 
    } 
    return true; 
} 

我調試的一切,它並返回false,如果該值存在。但是,然後,表單重新加載,沒有消息顯示在點輸入下面!此外,如果我調試validationErrors,該數組包含需要顯示的錯誤。 可能是什麼問題?

感謝任何幫助!

編輯

這是我建立我的輸入方式:

echo $this->Form->input('CapitalCategory.'.$i.'.value', array('label' => $category['Category']['name'], 'type' => 'text')); 
     echo $this->Form->input('CapitalCategory.'.$i.'.points', array('label' => 'Puncte', 'type' => 'text')); 

我相信問題可能是我在CapitalModel工作的事實,其中除了的某些字段CapitalModel,我使用了其相關模型CapitalCategorieModel中的幾個字段。這可能是沒有將驗證錯誤綁定到字段的問題嗎?如果是,我該如何解決?

回答

0

也許這是因爲CakePHP的不知道從哪裏把錯誤信息

,當你調用$this->invalidate ($name);
$name必須用您所創建的域(輸入)的名稱相匹配..

所以,你能告訴我你是如何創建表單輸入(字段)?

+0

我編輯了我的問題。謝謝。 – linkyndy 2011-04-06 16:47:37

+0

我以前沒有在我的字段名稱中使用數字,但是您可以嘗試將名稱的第二部分設置爲字符串而不是數字..即,而不是「CapitalCategory。」。$ i。'points' ',把''CapitalCategory.F'。$ i''。points''替換成你的所有代碼並讓我知道會發生什麼...... – 2011-04-07 19:06:48

+1

我需要這個號碼來告訴Cake保存'hasMany'關係記錄。當資本被保存時,CapitalCategory模型會爲每個CapitalCategory保存一個記錄[number] .field。 – linkyndy 2011-04-07 19:11:29

0

確保您不會混淆model :: $ validationErrors和Controller :: $ validationError。他們是不同的,不共享一個魔術債券。一個由模型方法填充,另一個由控制器方法填充。

+0

我不是。請檢查我的編輯,也許它更有幫助。謝謝。 – linkyndy 2011-04-06 16:48:08

+0

pr($ this - > [MODEL_NAME] - > validationErrors); 你會得到什麼? – Rui 2011-04-06 18:13:17

+0

我得到了需要顯示的正確錯誤。 – linkyndy 2011-04-06 18:48:22

1

那麼,無可否認,我不知道它爲什麼不顯示給你。根據我的理解,它應該在做cakephp'魔術'的事情。但是當我嘗試驗證並且cakephp沒有神奇地顯示錯誤時,我遇到了類似這樣的事情。我通過使用FormHelper類的另一個函數解決了這個問題。

$this->Form->error('field'); 

而且我完全承認這並不直接回答你的問題,但這至少是一種處理正在發生的事情的蛋糕方式。哦,如果沒有錯誤,上面的函數返回null,所以你可以把它放在任何你希望消息出現的地方。

如果你想看,這裏是API函數的蛋糕鏈接。 FormHelper API 2.4

相關問題