问题描述
使用 CakePHP 2.10:我正在保存 User 模型,但想检查是否随同提交了(新)密码。如果是,则需要对其进行哈希处理,并将 password_changed
字段更新为当前时间戳。
从 Model::beforeSave() 检查和更改数据很容易,因为数据可以通过 $this->data
访问,但 $fieldList 也需要更改。它通过函数的 $options
参数传递,但更改它当然没有任何效果。
public function beforeSave($options = array()) {
App::uses('Utitlity','Security');
if(!empty($this->data['User']['password'])) {
$this->data['User']['password'] = Security::hash($this->data[$this->name]['password'],'sha1',true); // Hash password
$this->data['User']['password_changed'] = date('Y-m-d H:i:s'); // Set password_changed to current timestamp
array_push($options['fieldList'],'password_changed'); // Make sure `password_changed` get's persisted <-- DOESN'T WORK (obvIoUsly)
}
return true;
}
我试图找出这是否也可以通过模型的属性访问。 Model->whitelist
似乎保留了一个 "fields allowed to be saved" 列表,但它被 Model::_doSave()
临时覆盖:
$_whitelist = $this->whitelist;
$fields = array();
if (!empty($options['fieldList'])) {
if (!empty($options['fieldList'][$this->alias]) && is_array($options['fieldList'][$this->alias])) {
$this->whitelist = $options['fieldList'][$this->alias];
} elseif (Hash::dimensions($options['fieldList']) < 2) {
$this->whitelist = $options['fieldList'];
}
} elseif ($options['fieldList'] === null) {
$this->whitelist = array();
}
如果我保存用户,我如何确保 password_changed
属性被保存,而不必在我的应用程序中的每个 $fieldList
中都包含它的键?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)