كيف يمكنني معرفة ما إذا كنت في Beforesave من تحرير أو إنشاء؟ Cakephp

StackOverflow https://stackoverflow.com/questions/1751476

سؤال

لدي نموذج حيث أحتاج إلى القيام ببعض المعالجة قبل الادخار (أو في بعض الحالات مع تحرير) ولكن ليس عادة عند التحرير ببساطة. في الواقع ، إذا قمت بالمعالجة في معظم التعديلات ، فسيكون الحقل الناتج خاطئًا. الآن ، أنا أعمل في رد اتصال 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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top