我有一个模型,我需要在保存之前(或在某些情况下进行编辑)进行一些处理,但通常不需要简单编辑。实际上,如果我对大多数编辑进行处理,结果字段将是错误的。现在,我正在使用模型的beforeSave回调。如何判断我是来自编辑还是添加?
Frank Luke
答案 0 :(得分:19)
function beforeSave() {
if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}
答案 1 :(得分:9)
这与neilcrookes的答案基本相同,只是我使用empty()
作为测试,而不是!isset()
。
如果数组键存在但是为空,则!isset将返回false,而empty将返回true。
我喜欢使用相同的视图文件进行添加和编辑,以保持我的代码DRY,这意味着在添加记录时,“id”键仍将设置,但不会保留任何内容。 Cake处理这个很好,除了neilcrookes版本的代码不会将它识别为add,因为primaryKey键是在数据数组中设置的(即使它什么也没有)。所以,改变!就是为了解决这种情况而空了。
function beforeSave() {
if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}