我的情况是这样的:我有两个字段用于用户的密码,“password”和“password_repeat”。
在创建(添加用户)时,必须明确填写这两个字段 相反,在更新(编辑用户)时,字段可以保留为空(因此用户的密码可以保持不变)。但是如果填写了“密码”字段,则必须填写“password_repeat”字段。
现在我用这种方式解决了它似乎有效:
public $validate = array(
'password' => array(
'minLengthOnCreate' => array(
'allowEmpty' => FALSE,
'message' => 'Must be at least %d characters',
'on' => 'create',
'rule' => array('minLength', 8)
),
'minLengthOnUpdate' => array(
'allowEmpty' => TRUE,
'message' => 'Must be at least %d characters',
'on' => 'update',
'rule' => array('minLength', 8)
)
),
'password_repeat' => array(
'passwordsMatchOnCreate' => array(
'allowEmpty' => FALSE,
'message' => 'Passwords don\'t match',
'on' => 'create',
'rule' => 'passwordsMatch'
),
'passwordsMatchOnUpdate' => array(
'allowEmpty' => TRUE,
'message' => 'Passwords don\'t match',
'on' => 'update',
'rule' => 'passwordsMatch'
)
)
);
这样,“创建”需要两个字段,而“更新”则不需要 现在我不喜欢这个,因为我认为有一种方法可以做得更好。
但这还不够:在“更新”时,如果填写了“密码”字段,则“password_repeat”字段可以留空。 所以我补充说:
public function beforeValidate($options = array()) {
if(!empty($this->data[$this->alias]['password']) && isset($this->data[$this->alias]['password_repeat']))
$this->validator()->getField('password_repeat')->getRule('passwordsMatchOnUpdate')->allowEmpty = FALSE;
return TRUE;
}
而且我也很喜欢。 但似乎一切都运作良好。
建议?