Рейтинг:0

EntitySubqueue save() работает только с die(), следующей за ней

флаг ca

Я пытаюсь автоматически добавить элемент в подочередь при сохранении. И по какой-то причине это работает, только если я включаю умереть() после.

Это добавляет новый узел в очередь

функция custom_module_entity_insert (EntityInterface $ сущность) {
  ...
  $subqueue = EntitySubqueue::load($entityqueue_id);
  $subqueue->addItem($entity)->save();
  умереть();
}

Это НЕ добавляет новый узел в очередь

функция custom_module_entity_insert (EntityInterface $ сущность) {
  ...
  $subqueue = EntitySubqueue::load($entityqueue_id);
  $subqueue->addItem($entity)->save();
}

Я пробовал использовать операторы сна и не могу заставить его работать без умереть(), который разрывает страницу после сохранения, очевидно. В журнале ошибок нет никаких полезных сообщений. Элемент сохраняется, просто не добавляется в очередь без умереть().

Есть ли у вас какие-либо идеи?

Это моя рабочая функция (и разбивает страницу)

/**
 * Реализует hook_entity_insert().
 */
функция custom_module_entity_insert (EntityInterface $ сущность) {
  // Беспокоитесь только о сущностях, которые доступны для поля.
  if ($entity instanceof FieldableEntityInterface) {
    if ($entity instanceof NodeInterface &&
        in_array($entity->getType(), ['подкаст','видео','пост'])) {
      автоматическиAddToEntityqueue($entity);
    }
  }
}

функция автоматическиAddToEntityqueue (EntityInterface $entity) {
  $entity_queue_type_mapping = массив(
    'подкаст' => 'все_остальное_подкаст',
    'видео' => 'все_остальное_видео',
    'сообщение' => 'все_остальное_сообщение'
  );
  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);
      если (method_exists($subqueue, 'addItem')) {
        $subqueue->addItem($entity)->save();
        умереть();
      }
    }
  }
}
MrD avatar
флаг cn
MrD
Это означает, что у вас есть циклический процесс. Позвольте проверить больше условий, чтобы остановить процесс цикла.
ProGrammar avatar
флаг ca
Сохраняет ли объект повторно после добавления его в подочередь? Например, он также сохраняет ссылку на очередь в сущности? Хотя обновления узлов не должны снова запускать hook_entity_insert... Мне потребовалось много времени, чтобы разобраться с этой ошибкой.
ProGrammar avatar
флаг ca
Обновление: добавлена ​​моя полная функция.
MrD avatar
флаг cn
MrD
Давайте проверим переменную $entity_queue_type_mapping, попробуйте только с элементом 'podcast' => 'everything_else_podcast' и удалите строку die().
ProGrammar avatar
флаг ca
MrD нет... тоже не работает.
berliner avatar
флаг bd
Вы проверили, не установлены ли другие модули, реализующие `hook_entity_insert` (или подобные хуки), которые могут мешать? Поскольку `die()` просто прерывает выполнение кода, он не ограничивается вашей текущей функцией, но также предотвращает выполнение любого кода после вызова вашего хука, поэтому я бы посмотрел там.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.