我尝试在CakePHP 2.1中的模型回调函数中使用现有的模型数据,但无法使其正常工作。 我所做的是尝试在beforeValidate()回调中获取用户角色并检查它是否为空。如果是,我会设置它。通常我会这样做,并且对于第一次创建记录,它的效果非常好。
if (empty($this->data[$this->alias]['role']))
$this->data[$this->alias]['role'] = 'user';
问题是,每次更新现有记录(用户)时,都会再次设置角色。
问题:那么,如何检查记录数据中是否已设置字段role
,而不是帖子数据(似乎$this->data[$this->alias]
仅包含POST数据)?
答案 0 :(得分:1)
我可以看到这个问题有三种解决方案。
前两个选项显而易见,所以我只会说明最后一个。
public function beforeValidate() {
if (!empty($this->id) {
$this->data[$this->alias][$this->primaryKey] = $this->id;
}
if (!empty($this->data[$this->alias][$this->primaryKey])) {
// user exists, check their data
$id = $this->data[$this->alias][$this->primaryKey];
$user = $this->find('first', array(
'conditions' => array($this->primaryKey => $id)
));
$this->data[$this->alias]['role'] = $user[$this->alias]['role'];
}
if (empty($this->data[$this->alias]['role'])) {
// new user but missing a role
$this->data[$this->alias]['role'] = 'user';
}
return true;
}
此回调将检查是否已传递ID,如果是,则会查找用户并填充role
字段。然后,它检查一个空角色,并在必要时用默认值填充它。显然他有更多的代码,错误的可能性越大,所以我建议默认列值的第一个选项。
答案 1 :(得分:0)
尝试:
if (empty($this->data[$this->alias]['role']) && empty($this->role)) {
$this->data[$this->alias]['role'] = 'user';
}