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 を返しますが、空の場合は true を返します。

コードを DRY に保つために、追加と編集に同じビュー ファイルを使用するのが好きです。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 に答える