我正在尝试仅为用户更新某些信息。具体来说,我不想更改密码。所以我有一个很好的表单,我想要更改的数据和我的控制器准备好接收它,甚至指定$model->save($param)
中的字段。
我让控制器准备好验证所有内容,包括所需密码。但我不需要验证它,因为我没有改变它。即便如此,我收到验证错误,告诉我密码是必需的。
我只想更改某些特定字段,我希望只在一个查询中执行此操作(将$model->saveField()
从游戏中删除)。
这可能吗?
我的控制器:
if (!empty($this->data)) {
$this->User->set($this->data);
if ($this->User->save()) {
//do stuff
}
}
数据数组只包含从表单发送的字段,其中不包含密码,但仍然出现验证错误。
在模型中,我有以下验证规则:
'passwordConfirmacion' => array(
'camposIdenticos' => array(
'rule' => array('camposIdenticos', 'password'),
'message' => 'La confirmacion no coincide',
'required' => true,
'allowEmpty' => false,
),
function camposIdenticos($data, $comparacion) {
$temp = array_keys($data);
$campo = $temp[0];
return $data[$campo] === $this->data['User'][$comparacion];
}
答案 0 :(得分:2)
将'on' => 'create'
添加到验证规则。这样,只有在创建记录时才能验证密码。
如果您希望稍后针对某些情况保留密码验证(例如,当用户确实想要更改其密码时),请使用'on' => 'update'
和'required' => false
添加其他类似规则。
答案 1 :(得分:2)
为密码字段将'required'设置为false。 如果要保存某些字段,请记住Model-> save()具有以下签名:
save(array $data = null, boolean $validate = true, array $fieldList = array())
答案 2 :(得分:1)
为什么不在那里手动保存()? 而不是
$this->User->save()
试
$this->User->id = $id; $this->User->save(array('User'=>array('field1'=>'value1','field2'=>'value2')));
<强>已更新强>
答案 3 :(得分:0)
//user.php
function beforeValidate() {
if ( isset( $this->data['User']['custom_validation'] ) ) { // or another flag
$validationSet = array();
switch ($this->data['User']['custom_validation']) {
case 'profile':
if ( !empty($this->data['User']['passwd']) || !empty($this->data['User']['passwd_confirm']) ) {
$validationSet['passwd'] = $this->validate['passwd'];
$validationSet['passwd_confirm'] = $this->validate['passwd_confirm'];
}
break;
}
$this->validate = $validationSet;
}
return true;
}
答案 4 :(得分:0)
我会使用此行为。 它们可以根据需要附加 - 在您可能拥有的任何register / change_pw操作中 http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/
这样你不仅限于“创造”或其他东西。只需附加行为并在表单中添加pwd字段。多数民众赞成。