保存する前に (または場合によっては編集を行う) 何らかの処理を行う必要があるモデルがありますが、通常は単純に編集する場合はそうではありません。実際、ほとんどの編集で処理を行うと、結果のフィールドは間違ったものになります。現在、モデルの beforeSave コールバックで作業しています。自分が編集から来たのか、追加から来たのか、どうすればわかりますか?
フランク・ルーク
function beforeSave() {
if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}
これは基本的に 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;
}