我有一个模型login
- 它有5个字段。在注册时我正在验证所有字段,但是当我编辑记录时,我想在保存数据之前仅验证一些字段。
我正在使用此代码:
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 {
}
但它不起作用。
答案 0 :(得分:2)
您应该通过设置on
to create
in the validation rule来正确执行此操作。每次在控制器中重复这个逻辑都是不好的。
您的具体问题是save
正在验证 ,并验证所有字段。事实上,第一次调用validates
完全是多余的。如果您只想保存/验证某些字段,则必须使用$fieldlist
函数的第三个save
参数:
$this->Login->save($this->data, true, array('password','name'))
答案 1 :(得分:0)
你最好分开一切,首先你验证,如果一切顺利,只有这样,保存任何数据。
验证应该返回一些数据,如果它已经失败,另外,每个字段都有不同的数据类型,要检查的不同内容 - 对于您的站点应该有一些分类,对于特定字段应该有什么限制。
答案 2 :(得分:0)
如果我理解正确,您只希望验证适用于create
,而不是update
。 Cake内置了此功能。
在您的模型中,每个字段验证规则都是,您将具有类似于:
的内容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'
)
);
可能会解决您的问题。