2012-01-24 28 views
3

我正在運行cakephp 2.0.2版本,並且爲什麼向模型關聯提交數據的表單提交沒有揭示關聯的錯誤消息,這讓我感到頭疼。validateAssociated覆蓋相關模型的錯誤,可能的錯誤?

我一直在挖掘模型類來進一步診斷。我發現,如果窗體的主要模式有其自身的驗證錯誤,那麼對於任何關聯沒有驗證錯誤究竟能不能在返回透露:

$this->validationErrors 

但我想我找到了確鑿的證據。在Model.php的validateAssociated方法,你會看到這一點:

$this->validationErrors = $validationErrors; 
if (isset($validationErrors[$this->alias])) { 
    $this->validationErrors = $validationErrors[$this->alias]; 
} 

第一行設置$this->validationErrors包含所有協會都建立了錯誤。但是,如果$validationErrors包含主要型號名稱$this->alias的密鑰的錯誤,則正如您所見,$this->validationErrors會被覆蓋爲僅僅這些錯誤。

所以這引發了一個問題....爲什麼?我很確定這是一個錯誤,我想修改我的Model.php,我認爲它會起作用。但是我想在別人面前這樣做,以防我在這裏做一些非常愚蠢的事情。

回答

0

今天我有同樣的問題。就像那個BC一樣。我知道,它很糟糕。它應該是一個錯誤。我的工作方式是重新格式化驗證錯誤。

// AppModel.php 

public function formatValidationErrors($models) { 
    foreach($models as $model => $assoc) { 
     if (is_numeric($model)) { 
      $model = $assoc; 
      $assoc = null; 
     } 
     $this->validationErrors[$model] = $this->{$model}->validationErrors; 
     if ($assoc) { 
      $this->{$model}->formatValidationErrors($assoc); 
     } 
    } 
} 

我打電話說,如果驗證失敗,並傳遞一個數組就像你會包含。如果你不想修改核心,你可以使用它。