我有一个模型,我需要在保存之前进行一些处理(或在某些情况下进行编辑),但通常在简单编辑时不需要。事实上,如果我对大多数编辑进行处理,结果字段将是错误的。现在,我正在处理模型的 beforeSave 回调。如何判断我是来自编辑还是添加?
弗兰克·卢克
function beforeSave() {
if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}
这与 neilcrookes 的回答基本相同,只是我empty()
用作测试,而不是!isset()
.
如果数组键存在但为空,则 !isset 将返回 false,而 empty 将返回 true。
我喜欢使用相同的视图文件进行添加和编辑,以保持我的代码 DRY,这意味着在添加记录时,'id' 键仍将被设置,但不会保留任何内容。Cake 可以很好地处理这个问题,除了 neilcrookes 版本的代码不会将其识别为添加,因为 primaryKey 键是在数据数组中设置的(即使它什么都不包含)。因此,将 !isset 更改为空只是说明了这种情况。
function beforeSave() {
if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}