11 Stimmen

Woran erkenne ich, ob ich mich in beforeSave von einer Bearbeitung oder einer Erstellung befinde? CakePHP

Ich habe ein Modell, bei dem ich vor dem Speichern (oder in bestimmten Fällen bei einer Bearbeitung) eine Bearbeitung vornehmen muss, aber normalerweise nicht, wenn ich einfach nur bearbeite. In der Tat, wenn ich die Verarbeitung auf die meisten Bearbeitungen tun, wird das resultierende Feld falsch sein. Im Moment arbeite ich im beforeSave-Callback des Modells. Wie kann ich feststellen, ob ich von der Bearbeitung oder dem Hinzufügen komme?

Frank Luke

19voto

neilcrookes Punkte 4208
function beforeSave() {
  if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}

9voto

joshua.paling Punkte 13322

Dies ist im Grunde dasselbe wie neilcrookes Antwort, außer dass ich empty() als Test zu verwenden, im Gegensatz zu !isset() .

Wenn ein Array-Schlüssel existiert, aber leer ist, dann gibt !isset false zurück, während empty true zurückgibt.

Ich möchte die gleiche Ansichtsdatei für hinzufügen und bearbeiten, um meinen Code DRY zu halten, was bedeutet, dass beim Hinzufügen eines Datensatzes, der "id"-Schlüssel immer noch festgelegt werden, aber nichts halten wird. Cake handhabt dies gut, außer neilcrookes Version des Codes erkennt es nicht als ein Hinzufügen, da der primaryKey-Schlüssel im Datenarray gesetzt ist (obwohl er nichts enthält). Also, ändern !isset zu leer nur Konten für diesen Fall.

function beforeSave() {
  if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X