Score:0

EntitySubqueue save() ใช้งานได้เฉพาะกับ die() ที่ตามมา

ธง ca

ฉันกำลังพยายามเพิ่มรายการในคิวย่อยโดยอัตโนมัติเมื่อบันทึก และด้วยเหตุผลบางอย่าง มันจะใช้ได้ก็ต่อเมื่อฉันใส่เข้าไปด้วย ตาย() หลังจากนั้น

สิ่งนี้จะเพิ่มโหนดใหม่ให้กับคิว

ฟังก์ชัน custom_module_entity_insert (EntityInterface $entity) {
  ...
  $subqueue = EntitySubqueue::load($entityqueue_id);
  $subqueue->addItem($entity)->save();
  ตาย();
}

สิ่งนี้ไม่ได้เพิ่มโหนดใหม่ลงในคิว

ฟังก์ชัน custom_module_entity_insert (EntityInterface $entity) {
  ...
  $subqueue = EntitySubqueue::load($entityqueue_id);
  $subqueue->addItem($entity)->save();
}

ฉันได้ลองใส่คำสั่งการนอนหลับและไม่สามารถทำงานได้หากไม่มี ตาย()ซึ่งแบ่งหน้าหลังจากบันทึกอย่างเห็นได้ชัด ไม่มีข้อความที่เป็นประโยชน์ในบันทึกข้อผิดพลาด รายการจะบันทึก แต่จะไม่ถูกเพิ่มลงในคิวหากไม่มี ตาย().

คุณมีความคิดใด ๆ ?

นี่คือฟังก์ชั่นการทำงานของฉัน (และแบ่งหน้า)

/**
 * ใช้ hook_entity_insert()
 */
ฟังก์ชัน custom_module_entity_insert (EntityInterface $entity) {
  // กังวลเฉพาะเอนทิตีที่สามารถฟิลด์ได้
  ถ้า (อินสแตนซ์ $entity ของ FieldableEntityInterface) {
    ถ้า ($ เอนทิตีอินสแตนซ์ของ NodeInterface &&
        in_array($entity->getType(), ['podcast','video','post'])) {
      โดยอัตโนมัติ AddToEntityqueue ($ เอนทิตี);
    }
  }
}

ฟังก์ชัน AutomaticAddToEntityqueue (EntityInterface $entity) {
  $entity_queue_type_mapping = อาร์เรย์(
    'podcast' => 'everything_else_podcast',
    'วิดีโอ' => 'ทุกอย่าง_else_วิดีโอ',
    'โพสต์' => 'ทุกอย่าง_else_post'
  );
  foreach ($entity_queue_type_mapping เป็น $type => $entityqueue_id) {
    ถ้า (อินสแตนซ์ $entity ของ NodeInterface && $type == $entity->getType()) {
      /** @var \Drupal\entityqueue\EntitySubqueueInterface $subqueue */
      $subqueue = EntitySubqueue::load($entityqueue_id);
      ถ้า (method_exists ($ subqueue, 'addItem')) {
        $subqueue->addItem($entity)->save();
        ตาย();
      }
    }
  }
}
MrD avatar
cn flag
MrD
นั่นหมายความว่าคุณมีกระบวนการวนซ้ำ ให้ตรวจสอบเงื่อนไขเพิ่มเติมเพื่อหยุดกระบวนการวนซ้ำของคุณ
ProGrammar avatar
ca flag
มันบันทึกเอนทิตีอีกครั้งหลังจากเพิ่มไปยังคิวย่อยหรือไม่ มันบันทึกการอ้างอิงถึงคิวในเอนทิตีด้วยหรือไม่ แม้ว่าการอัปเดตโหนดไม่ควรเรียกใช้ hook_entity_insert อีกครั้ง... ข้อผิดพลาดนี้ทำให้ฉันใช้เวลานานมากในการทำความเข้าใจ
ProGrammar avatar
ca flag
ปรับปรุง: เพิ่มฟังก์ชั่นเต็มรูปแบบของฉัน
MrD avatar
cn flag
MrD
ให้ตรวจสอบตัวแปร $entity_queue_type_mapping ลองเฉพาะรายการ 'podcast' => 'everything_else_podcast' และลบบรรทัด die()
ProGrammar avatar
ca flag
MrD ไม่... ไม่ทำงานเช่นกัน
berliner avatar
bd flag
คุณตรวจสอบแล้วว่ามีการติดตั้งโมดูลอื่นที่ใช้ `hook_entity_insert` (หรือ hooks ที่คล้ายกัน) ที่อาจรบกวนหรือไม่ เนื่องจาก `die()` ขัดขวางการทำงานของโค้ด จึงไม่ได้จำกัดเฉพาะฟังก์ชันปัจจุบันของคุณเท่านั้น แต่ยังป้องกันโค้ดใดๆ หลังจากการเรียกใช้ hook ของคุณไม่ให้ทำงานด้วย ดังนั้นฉันจะดูที่นั่น

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา