【问题标题】:How can I tell if I'm in beforeSave from an edit or a create? CakePHP如何判断我是在编辑还是创建之前保存? CakePHP
【发布时间】:2010-12-17 14:42:15
【问题描述】:

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

弗兰克·卢克

【问题讨论】:

    标签: cakephp model callback save edit


    【解决方案1】:

    这与 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;
    }
    

    【讨论】:

      【解决方案2】:
      function beforeSave() {
        if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
          // insert
        } else {
          // edit
        }
        return true;
      }
      

      【讨论】:

      • 一个稍微好一点的方法是使用测试'empty',而不是使用测试'!isset'。这样,如果数据数组中的主键字段恰好存在,但为空(有时共享添加和编辑视图时就是这种情况),那么它仍然会将其识别为保存新记录。
      • 这对我在 cakephp3 上不起作用。 Cakephp 3 版本请查看stackoverflow.com/a/25589117/1152756
      猜你喜欢
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      相关资源
      最近更新 更多