Рейтинг:0

Подписчик событий Feeds перестал работать

флаг cn

По какой-то причине мои подписчики на события каналов просто перестали работать.

Мой код выглядит так, dpm для отладки никогда не запускается, поэтому я думаю, что функция не запускается.

Я не могу понять, что изменилось.


пространство имен Drupal\partshub_feeds_modifications\EventSubscriber;

используйте Drupal\feeds\Event\EntityEvent;
используйте Drupal\feeds\Event\FeedsEvents;
используйте Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Реагирует на события каналов, чтобы изменить свойства канала.
 */
класс FeedsSubscriber реализует EventSubscriberInterface {

  /**
   * {@inheritdoc}
   */
  общедоступная статическая функция getSubscribedEvents() {
    $события = [];
    $events[FeedsEvents::PROCESS_ENTITY_PRESAVE][] = 'предварительно сохранить';
    $events[FeedsEvents::PROCESS_ENTITY_POSTSAVE][] = 'после сохранения';

    вернуть $события;
  }

  /**
   * Действует при сохранении объекта.
   *
   * @param Drupal\feeds\Event\EntityEvent $event
   * Лента события.
   */
  предварительное сохранение публичной функции (EntityEvent $event) {
    дпм($событие);
    // Получить объект фида.
    $feed = $event->getFeed();
    // Получить объект, над которым выполняется операция.
    if ($feed->type->entity->id() === 'parts') {
      $entity = $event->getEntity();
      // Получить неизмененный объект.
      $unchanged_entity = \Drupal::entityTypeManager()
        ->getStorage('узел')
        ->loadUnchanged($entity->id());
      // Проверяем, является ли сущность новой.
      если (!$entity->isNew()) {
        // Только если деталь не новая, проверяем значения.
        if ($feed->type->entity->label() === 'Части') {
          если ($entity->get('title')->value === 'пусто') {
            $entity->get('title')->value = $unchanged_entity->get('title')->value;
          }

          // Поле фурнитуры/марки детали.
          если ($entity->get('field_make')->isEmpty()) {
            $makes = $unchanged_entity->get('field_make')->referencedEntities();
            foreach ($ делает как $index => $term) {
              $tid = $term->id();
              если ($индекс == 0) {
                $entity->set('field_make', $tid);
              }
              еще {
                $entity->get('field_make')->appendItem([
                  'target_id' => $tid,
                ]);
              }
            }
          }


          // Код группы деталей.
          если ($entity->get('field_group_code')->isEmpty()) {
            $codes = $unchanged_entity->get('field_group_code')
              ->ссылочные объекты();
            foreach ($codes как $index => $code) {
              $code_id = $code->id();
              если ($индекс == 0) {
                $entity->set('field_group_code', $code_id);
              }
              еще {
                $entity->get('field_group_code')->appendItem([
                  'target_id' => $code_id,
                ]);
              }
            }
          }

          // Перекрестные ссылки.
          если ($entity->get('field_cross_references')->isEmpty()) {
            $references = $unchanged_entity->get('field_cross_references')
              ->ссылочные объекты();
            foreach ($ ссылки как $ index => $ ссылка) {
              $reference_id = $reference->id();
              если ($индекс == 0) {
                $entity->set('field_cross_references', $reference_id);
              }
              еще {
                $entity->get('field_cross_references')->appendItem([
                  'target_id' => $reference_id,
                ]);
              }
            }
          }
        }
        elseif ($feed->type->entity->label() === 'Физические атрибуты') {
          если ($entity->get('title')->value === 'пусто') {
            $entity->get('title')->value = $unchanged_entity->get('title')->value;
          }
          // Вес детали.
          если ($entity->get('field_weight')->isEmpty()) {
            $entity->get('field_weight')->value = $unchanged_entity->get('field_weight')->value;
          }
          // Высота детали.
          если ($entity->get('field_height')->isEmpty()) {
            $entity->get('field_height')->value = $unchanged_entity->get('field_height')->value;
          }
          // Ширина детали.
          если ($entity->get('field_width')->isEmpty()) {
            $entity->get('field_width')->value = $unchanged_entity->get('field_width')->value;
          }
          // Глубина детали.
          если ($entity->get('field_depth')->isEmpty()) {
            $entity->get('field_depth')->value = $unchanged_entity->get('field_depth')->value;
          }
        }
      }
    }
  }

  /**
   * Действует при сохранении объекта.
   *
   * @param Drupal\feeds\Event\EntityEvent $event
   * Лента события.
   */
  публичная функция postsave (EntityEvent $event) {
    $feed = $event->getFeed();
    $feeds = ['oe_references', 'sub_components', 'dimensions'];
    $id = $feed->type->entity->id();
    если (in_array($id, $feeds)) {
      $entity = $event->getEntity();
      $parent_field_name = $entity->parent_field_name->значение;
      $parent_id = $entity->parent_id->значение;
      $vid = \Drupal::entityTypeManager()->getStorage('node')->getLatestRevisionId($parent_id);
      $part = \Drupal::entityTypeManager()->getStorage('node')->loadRevision($vid);
      $paragraph_references = $part->get($parent_field_name)->referencedEntities();
      $paragraph_references_id = [];
      если ($ paragraph_references) {
        foreach ($paragraph_references как $paragraph_reference) {
          $paragraph_references_id[] = $paragraph_reference->id();
        }
      }
      если (!in_array($entity->id(), $paragraph_references_id)) {
        $поля = [
          'field_oe_references', 'field_sub_components_', 'field_dimensions'
        ];
        если (in_array($parent_field_name, $fields)) {
          если ($ часть) {
            $part->{$parent_field_name}[] = $сущность;
            $часть->сохранить();
          }
        }
      }
    }
  }

}

У меня также есть определение службы следующим образом.

Сервисы:
  # Имя этой службы.
  parthsub_feeds_modifications_events_subscriber:
    # Класс подписчика событий, который будет прослушивать события.
    класс: Drupal\partshub_feeds_modifications\EventSubscriber\FeedsSubscriber
    # Помечен как event_subscriber, чтобы зарегистрировать этого подписчика в службе event_dispatch.
    теги:
      - {имя: event_subscriber}
флаг cn
Пользовательский модуль с этим кодом включен, верно?
флаг cn
да :-) так странно, как все работало раньше, проверил все основы, очистил кеш и т. д. Я посмотрел несколько примеров и видел некоторые имена сервисов с . поэтому я также попытался изменить имя службы на `parthsub_feeds_modifications.events_subscriber`, но это тоже не сработало.
Рейтинг:0
флаг cn

Нет ответа на это, я получал ошибки проверки до того, как было запущено предварительное сохранение, что означало, что этот код никогда не запускался.

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

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