11

我有一个模型,我需要在保存之前进行一些处理(或在某些情况下进行编辑),但通常在简单编辑时不需要。事实上,如果我对大多数编辑进行处理,结果字段将是错误的。现在,我正在处理模型的 beforeSave 回调。如何判断我是来自编辑还是添加?

弗兰克·卢克

4

2 回答 2

19
function beforeSave() {
  if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}
于 2009-11-17T22:10:08.840 回答
9

这与 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;
}
于 2013-06-05T06:51:45.213 回答