2011-05-26 92 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' 
    ) 
); 

可能会解决您的问题。