كيف يمكنني معرفة ما إذا كنت في Beforesave من تحرير أو إنشاء؟ Cakephp
سؤال
لدي نموذج حيث أحتاج إلى القيام ببعض المعالجة قبل الادخار (أو في بعض الحالات مع تحرير) ولكن ليس عادة عند التحرير ببساطة. في الواقع ، إذا قمت بالمعالجة في معظم التعديلات ، فسيكون الحقل الناتج خاطئًا. الآن ، أنا أعمل في رد اتصال Beforesave للنموذج. كيف يمكنني معرفة ما إذا جئت من التحرير أو أضيف؟
فرانك لوك
المحلول
function beforeSave() {
if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}
نصائح أخرى
هذا هو نفس إجابة Neilcrookes ، إلا أنني أستخدم empty()
كاختبار ، على عكس !isset()
.
في حالة وجود مفتاح صفيف ، ولكنه فارغ ، فسوف يعود إيسيت كاذبة ، في حين أن فارغ سيعود صحيحًا.
أرغب في استخدام ملف العرض نفسه لإضافة وتحرير ، للحفاظ على جفاف الكود الخاص بي ، مما يعني أنه عند إضافة سجل ، سيظل مفتاح "ID" يتم تعيينه ، ولكن لن يحتفظ بأي شيء. يتعامل Cake مع هذا الغرامة ، باستثناء إصدار Neilcrookes من الكود لن يتعرف عليه كإضافة ، حيث يتم تعيين مفتاح PrimaryKey في صفيف البيانات (على الرغم من أنه لا يحمل شيئًا). لذلك ، قم بتغيير! isset لتفريغ الحسابات فقط لهذه القضية.
function beforeSave() {
if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}