2011-05-26 140 views
1

我有一個模型login - 它有5個字段。在註冊時,我正在驗證所有字段,但是當我編輯記錄時,我只想在保存數據之前驗證一些字段。表單驗證在cakephp

我使用這個代碼:

if ($this->Login->validates(array('fieldList' => array('password','name')))) { 
    if ($this->Login->save($this->data)) { 
     echo 'helllo';exit; 
     //$this->Session->setFlash('Your post has been updated.'); 
     //$this->redirect(array('action' => 'profile')); 
    }else { 

    } 
} else { 

} 

但它不工作。

回答

2

你應該通過設置on to create in the validation rule來正確地做到這一點。每次在控制器中重複這個邏輯都是不好的。

你的情況的具體問題是,save再次驗證和驗證所有領域。實際上,第一個電話validates完全是多餘的。你將不得不使用save功能的第三$fieldlist參數,如果你只是想保存/驗證某些字段:

$this->Login->save($this->data, true, array('password','name')) 
+0

它因爲我使用主鍵someid代替id。 – p27 2011-05-27 06:34:37

+2

@ p27然後告訴Cake:http://book.cakephp.org/view/1061/primaryKey – deceze 2011-05-27 06:36:18

+0

感謝您的好建議。 – p27 2011-05-27 08:59:54

0

你最好單獨的一切,一開始你驗證,如果一切正常的話,只有到那時,節省任何數據。

驗證應該返回一些數據,它失敗了,另外,也有不同的數據類型,不同的東西來檢查,每個字段 - 應該有你的網站,還有一些分類,什麼是限制,爲特定領域。

0

如果我理解正確,您只需要驗證適用於create,而不是update。蛋糕內置了

在模型中,每個字段的驗證規則,你將有類似的東西這個功能:

var $validate = array(
    'fieldName1' => array(
     'rule' => 'ruleName', // or: array('ruleName', 'param1', 'param2' ...) 
     'required' => true, 
     'allowEmpty' => false, 
     'on' => 'create', // or: 'update'  ** here ** 
     'last' => false, 
     'message' => 'Your Error Message' 
    ) 
); 

可能會解決您的問題。