Điểm:0

EntitySubqueue save() chỉ hoạt động với die() theo sau nó

lá cờ ca

Tôi đang cố tự động thêm một mục vào hàng đợi phụ khi lưu. Và vì một số lý do, nó chỉ hoạt động nếu tôi bao gồm chết() sau đó.

Điều này thêm nút mới vào hàng đợi

chức năng custom_module_entity_insert(EntityInterface $entity) {
  ...
  $subqueue = EntitySubqueue::load($entityqueue_id);
  $subqueue->addItem($entity)->save();
  chết();
}

Điều này KHÔNG thêm nút mới vào hàng đợi

chức năng custom_module_entity_insert(EntityInterface $entity) {
  ...
  $subqueue = EntitySubqueue::load($entityqueue_id);
  $subqueue->addItem($entity)->save();
}

Tôi đã thử đặt các báo cáo về giấc ngủ xung quanh và không thể làm cho nó hoạt động nếu không có chết(), rõ ràng là sẽ ngắt trang sau khi lưu. Không có bất kỳ thông báo hữu ích nào trong nhật ký lỗi. Vật phẩm được lưu, nó chỉ không được thêm vào hàng đợi nếu không có chết().

Bạn còn ý kiến ​​nào không?

Đây là chức năng làm việc của tôi (và ngắt trang)

/**
 * Triển khai hook_entity_insert().
 */
chức năng custom_module_entity_insert(EntityInterface $entity) {
  // Chỉ lo lắng về các thực thể có thể nhập trường.
  if ($entity instanceof FieldableEntityInterface) {
    if ($entity instanceof NodeInterface &&
        in_array($entity->getType(), ['podcast','video','post'])) {
      tự độngAddToEntityqueue($entity);
    }
  }
}

chức năng tự độngAddToEntityqueue(EntityInterface $entity) {
  $entity_queue_type_mapping = mảng(
    'podcast' => 'mọi_thứ_podcast',
    'video' => 'mọi_thứ_video',
    'bài đăng' => 'mọi_thứ_bài_viết'
  );
  foreach ($entity_queue_type_mapping as $type => $entityqueue_id) {
    if ($entity instanceof NodeInterface && $type == $entity->getType()) {
      /** @var \Drupal\entityqueue\EntitySubqueueInterface $subqueue */
      $subqueue = EntitySubqueue::load($entityqueue_id);
      if (method_exists($subqueue, 'addItem')) {
        $subqueue->addItem($entity)->save();
        chết();
      }
    }
  }
}
MrD avatar
lá cờ cn
MrD
Điều đó có nghĩa là bạn có một quy trình vòng lặp. Hãy kiểm tra thêm điều kiện để dừng quá trình vòng lặp của bạn.
ProGrammar avatar
lá cờ ca
Nó có lưu lại thực thể sau khi thêm nó vào hàng đợi phụ không? Giống như nó cũng lưu một tham chiếu đến hàng đợi trên thực thể? Mặc dù các bản cập nhật cho các nút không nên kích hoạt lại hook_entity_insert... Lỗi này đã khiến tôi mất rất nhiều thời gian để tìm ra.
ProGrammar avatar
lá cờ ca
Cập nhật: đã thêm chức năng đầy đủ của tôi.
MrD avatar
lá cờ cn
MrD
Hãy kiểm tra biến $entity_queue_type_mapping, thử chỉ với mục 'podcast' => 'everything_else_podcast' và xóa dòng die().
ProGrammar avatar
lá cờ ca
MrD không ... cũng không hoạt động.
berliner avatar
lá cờ bd
Bạn đã kiểm tra xem có các mô-đun khác được cài đặt triển khai `hook_entity_insert` (hoặc các móc tương tự) có thể gây cản trở không? Vì `die()` chỉ đơn giản là làm gián đoạn quá trình thực thi mã, nên nó không giới hạn ở chức năng hiện tại của bạn, mà còn ngăn không cho bất kỳ mã nào chạy sau lệnh hook của bạn, vì vậy tôi sẽ xem xét ở đó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.