2009-11-17 8 views
11

Ich habe ein Modell, wo ich vor dem Speichern einige Bearbeitungen vornehmen muss (oder in bestimmten Fällen mit einer Bearbeitung), aber normalerweise nicht, wenn Sie einfach bearbeiten. In der Tat, wenn ich die Verarbeitung bei den meisten Bearbeitungen mache, ist das resultierende Feld falsch. Momentan arbeite ich im PreviousSave Callback des Modells. Wie kann ich feststellen, ob ich von der Bearbeitung gekommen bin oder hinzugefügt habe?Wie kann ich feststellen, ob ich vor einem Bearbeiten oder Erstellen bin? CakePHP

Frank Luke

Antwort

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

Vielen Dank. Arbeitete perfekt. –

+1

Ein etwas besserer Weg, es zu tun, ist, anstatt den Test '! Isset' zu verwenden, den Test 'leer' zu verwenden. Wenn also das Primärschlüsselfeld im Datenarray existiert, aber leer ist (wie es manchmal der Fall ist, wenn Sie die Ansicht zum Hinzufügen und Bearbeiten freigeben), erkennt es immer noch, dass es einen neuen Datensatz speichert. –

+0

Dies funktioniert bei mir auf cakephp3 nicht. Für die Version CakePHP 3 überprüfen Sie bitte https://Stackoverflow.com/a/25589117/1152756 – jpruizs

9

Dies ist im Grunde die gleiche wie neilcrookes' Antwort, außer ich empty() als Test bin mit, wie zu !isset() gegenüber.

Wenn ein Array-Schlüssel vorhanden ist, aber leer ist, gibt! Isset den Wert false zurück, während leer den Wert true zurückgibt.

Ich verwende gerne die gleiche Ansichtsdatei zum Hinzufügen und Bearbeiten, um meinen Code DRY zu behalten, was bedeutet, dass beim Hinzufügen eines Datensatzes der 'id' Schlüssel immer noch gesetzt ist, aber nichts hält. Cake kümmert sich darum, außer dass die Neilcrookes-Version des Codes es nicht als add erkennt, da der primaryKey-Schlüssel im Daten-Array gesetzt ist (obwohl er nichts enthält). Also, ändern! Isset, um nur Konten für diesen Fall zu leeren.

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