2012-01-02 92 views
2

我正在使用cakephp 2.0.2。我正在保存一個相對簡單的模型關聯。具有與圖像一對多關聯的工作模型。我發現這兩種模式的驗證是以不可預知的方式工作的。Cakephp 2.0驗證問題

當我做了非常有效的形式保存:

$this->Work->saveAll($this->data); 

我能成功保存數據,但是當我打電話:

$this->Work->invalidFields(); 

我居然看到失敗驗證工作模型的規則,即使表單不應該觸發它們。

Array 
(
    [title] => Array 
     (
      [0] => Please enter a title. 
     ) 

    [copy] => Array 
     (
      [0] => Please enter project copy. 
     ) 

) 

用這個做進一步試驗。如果我重新提交有意留爲空白標題字段的形式,我會從我的$this->Work->invalidFields()調用如下

Array 
(
    [title] => Array 
     (
      [0] => Please enter a title. 
      [1] => Please enter a title. 
     ) 

) 

因此,它似乎在默認情況下,無論規則被顯示一次如果真的無效或不。然後再次,如果該領域真的無效。

最後,對於後人,我簡單的驗證規則:

public $validate = array(
    'title' => array(
     'rule' => 'notEmpty', 
     'required' => true, 
     'message' => 'Please enter a title.' 
    ), 
    'copy' => array(
     'rule' => 'notEmpty', 
     'required' => true, 
     'message' => 'Please enter project copy.' 
    ) 
); 

任何對這個奇異的想法?提前致謝!

+0

我得到完全相同的錯誤。你有沒有找到解決方案?謝謝!查克。 – 2013-03-14 02:24:09

回答

0

您是否嘗試將數據設置爲模型的數據數組,然後驗證?我的猜測是驗證需要明確調用。但是...您可以瀏覽lib文件夾中的cake模型類來查找。

$this->Work->data = $data; 
if($this->Work->validate()){ 
    $this->Work->saveAll(); 
} 
+0

您忘記完成您的評論了嗎? – 2012-01-04 03:44:02

0

https://cakephp.lighthouseapp.com/projects/42648/tickets/2597-model-invalidfields-add-validation-messages-each-time-it-s-called

這個答案從馬克 - 故事:

是的,這是它如何工作的。由於您使用的是較低級別的方法,因此不會重置 validationErrors。你應該使用create()+ save()到 自動刷新錯誤。或者如果你只是想要錯誤,你應該 訪問Models-> validationErrors屬性,而不是調用 invalidFields()。