2011-01-14 127 views
4

我更新了一些數據,將其插入字段並單擊更新按鈕,但validates()始終返回false。 所有字段填寫正確,並且不顯示任何錯誤消息 - validates()只返回false。 爲什麼?cakephp,驗證錯誤

$this->Post->set($this->data); 
if ($this->Post->validates()) 
    echo 'ok'; 
else 
    echo 'error'; 
+1

首先,語法不正確,有一個開頭`{`但沒有關閉`}`。其次,嘗試`debug($ this-> Post-> invalidFields())`來查看哪些字段失敗。 – deceze 2011-01-14 08:37:13

+0

謝謝。我在數據庫中有8個字段,但只希望更新4.爲什麼Cake會驗證所有8個字段? – lolalola 2011-01-14 08:56:03

回答

5

檢查this post的一些提示。 相關的在這裏給出。

  1. 保存()不起作用! 有時發生save()失敗沒有任何明顯的原因。你的數據數組看起來很好,你已經正確地構建了表單等,但沒有執行查詢。由於驗證錯誤,保存失敗的可能性很大。也許你正在更新某個模型,而當表單中的當前字段通過驗證時,有一些「其他」可能導致驗證規則失敗。查看驗證過程的一個簡單(有用的)方法是在您的視圖中執行pr($this->validationErrors);。通過採用這種方法,您將會看到模型驗證過程中發生了什麼。另一種選擇是將false作爲第二個參數傳遞給save();以禁用驗證。然而,後一種方法並沒有給出太多提示,不應該用來解決失敗的問題,而是故意避免驗證。

  2. 保存()仍然不起作用! 您的模型或應用模型中是否有beforeSave();?始終仔細檢查此方法,更重要的是,確保它返回true

  3. 驗證創建或更新 CakePHP有一個'on'密鑰用於您的$validate陣列。它允許您指定在創建新記錄期間還是在更新現有記錄期間應執行規則。例如,如果您只想在創建新的用戶帳戶時檢查唯一的電子郵件地址,則可以將'on' => 'create'添加到您的$validate陣列中。因此,當您更新/編輯某個用戶時,該規則將被忽略。