Comment puis-je savoir si je suis en beforeSave d'une modification ou une création? CakePHP
Question
J'ai un modèle où je dois faire un peu de traitement avant d'enregistrer (ou dans certains cas, avec une modification), mais généralement pas lors de l'édition simple. En fait, si je fais le traitement de la plupart des modifications, le champ résultant sera erroné. En ce moment, je travaille dans le rappel beforeSave du modèle. Comment puis-je savoir si je suis venu de la modifier ou ajouter?
Frank Luke
La solution
function beforeSave() {
if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}
Autres conseils
Ceci est essentiellement le même que la réponse de neilcrookes, sauf que je suis en utilisant empty()
en tant que test, par opposition à !isset()
.
Si une clé de tableau existe, mais il est vide, alors! Isset retournera false, alors vide retourne vrai.
J'aime utiliser le même fichier d'affichage pour ajouter et modifier, de garder mon code SEC, ce qui signifie que lors de l'ajout d'un enregistrement, la touche « id » sera toujours défini, mais garderai rien. poignées gâteau cette fin, à l'exception de la version neilcrookes du code ne reconnaît pas comme un complément, car la clé primaryKey est définie dans le tableau de données (même si elle ne retient rien). Alors, en changeant isset! Vider les comptes juste pour ce cas.
function beforeSave() {
if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}