Điểm:0

Người đăng ký sự kiện nguồn cấp dữ liệu ngừng hoạt động

lá cờ cn

Vì lý do nào đó, người đăng ký sự kiện nguồn cấp dữ liệu của tôi vừa ngừng hoạt động.

Mã của tôi trông như thế này, dpm để gỡ lỗi không bao giờ được kích hoạt nên tôi nghĩ chức năng này không được chạy.

Tôi không thể tìm ra những gì đã thay đổi.


không gian tên Drupal\partshub_feeds_modifications\EventSubscriber;

sử dụng Drupal\feeds\Event\EntityEvent;
sử dụng Drupal\feeds\Event\FeedsEvents;
sử dụng Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Phản ứng với các sự kiện nguồn cấp dữ liệu để sửa đổi thuộc tính nguồn cấp dữ liệu.
 */
lớp FeedsSubscriber triển khai EventSubscriberInterface {

  /**
   * {@inheritdoc}
   */
  hàm tĩnh công khai getSubscribeEvents() {
    sự kiện $ = [];
    $events[FeedsEvents::PROCESS_ENTITY_PRESAVE][] = 'lưu trước';
    $events[FeedsEvents::PROCESS_ENTITY_POSTSAVE][] = 'postsave';

    trả lại sự kiện $;
  }

  /**
   * Hành động lưu trước một thực thể.
   *
   * @param Drupal\feeds\Event\EntityEvent $event
   * Sự kiện nguồn cấp dữ liệu.
   */
  lưu trước chức năng công cộng (EntityEvent $event) {
    dpm($event);
    // Lấy đối tượng feed.
    $feed = $event->getFeed();
    // Lấy thực thể đang được vận hành.
    if ($feed->type->entity->id() === 'parts') {
      $entity = $event->getEntity();
      // Lấy thực thể không thay đổi.
      $unchanged_entity = \Drupal::entityTypeManager()
        ->getStorage('nút')
        ->loadUnchanged($entity->id());
      // Kiểm tra xem thực thể có mới không.
      if (!$entity->isNew()) {
        // Chỉ khi một phần không phải là giá trị kiểm tra mới.
        if ($feed->type->entity->label() === 'Parts') {
          if ($entity->get('title')->value === 'trống') {
            $entity->get('title')->value = $unchanged_entity->get('title')->value;
          }

          // Phần phù hợp/tạo trường.
          if ($entity->get('field_make')->isEmpty()) {
            $makes = $unchanged_entity->get('field_make')->referencedEntities();
            foreach ($làm như $index => $term) {
              $tid = $term->id();
              nếu ($index == 0) {
                $entity->set('field_make', $tid);
              }
              khác {
                $entity->get('field_make')->appendItem([
                  'đích_id' => $tid,
                ]);
              }
            }
          }


          // Phần mã nhóm.
          if ($entity->get('field_group_code')->isEmpty()) {
            $codes = $unchanged_entity->get('field_group_code')
              ->tham chiếuEntities();
            foreach ($codes as $index => $code) {
              $code_id = $code->id();
              nếu ($index == 0) {
                $entity->set('field_group_code', $code_id);
              }
              khác {
                $entity->get('field_group_code')->appendItem([
                  'đích_id' => $code_id,
                ]);
              }
            }
          }

          // Tham chiếu chéo.
          if ($entity->get('field_cross_references')->isEmpty()) {
            $references = $unchanged_entity->get('field_cross_references')
              ->tham chiếuEntities();
            foreach ($tham chiếu dưới dạng $index => $reference) {
              $reference_id = $reference->id();
              nếu ($index == 0) {
                $entity->set('field_cross_references', $reference_id);
              }
              khác {
                $entity->get('field_cross_references')->appendItem([
                  'target_id' => $reference_id,
                ]);
              }
            }
          }
        }
        elseif ($feed->type->entity->label() === 'Thuộc tính vật lý') {
          if ($entity->get('title')->value === 'trống') {
            $entity->get('title')->value = $unchanged_entity->get('title')->value;
          }
          // Trọng lượng một phần.
          if ($entity->get('field_weight')->isEmpty()) {
            $entity->get('field_weight')->value = $unchanged_entity->get('field_weight')->value;
          }
          // Phần Chiều Cao.
          if ($entity->get('field_height')->isEmpty()) {
            $entity->get('field_height')->value = $unchanged_entity->get('field_height')->value;
          }
          // Phần Chiều rộng.
          if ($entity->get('field_width')->isEmpty()) {
            $entity->get('field_width')->value = $unchanged_entity->get('field_width')->value;
          }
          // Độ sâu của phần.
          if ($entity->get('field_depth')->isEmpty()) {
            $entity->get('field_depth')->value = $unchanged_entity->get('field_depth')->value;
          }
        }
      }
    }
  }

  /**
   * Hành động lưu trước một thực thể.
   *
   * @param Drupal\feeds\Event\EntityEvent $event
   * Sự kiện nguồn cấp dữ liệu.
   */
  chức năng công khai postave(EntityEvent $event) {
    $feed = $event->getFeed();
    $feeds = ['oe_references', 'sub_components', 'dimensions'];
    $id = $feed->type->entity->id();
    nếu (in_array($id, $feeds)) {
      $entity = $event->getEntity();
      $parent_field_name = $entity->parent_field_name->value;
      $parent_id = $entity->parent_id->value;
      $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 = [];
      nếu ($paragraph_references) {
        foreach ($paragraph_references là $paragraph_reference) {
          $paragraph_references_id[] = $paragraph_reference->id();
        }
      }
      if (!in_array($entity->id(), $paragraph_references_id)) {
        trường $ = [
          'field_oe_references', 'field_sub_components_', 'field_dimensions'
        ];
        if (in_array($parent_field_name, $fields)) {
          nếu ($ một phần) {
            $part->{$parent_field_name}[] = $entity;
            $part->save();
          }
        }
      }
    }
  }

}

Tôi cũng có một định nghĩa dịch vụ như sau.

dịch vụ:
  # Tên của dịch vụ này.
  parthsub_feeds_modifications_events_subscriber:
    # Lớp người đăng ký sự kiện sẽ lắng nghe các sự kiện.
    lớp: Drupal\partshub_feeds_modifications\EventSubscriber\FeedsSubscriber
    # Được gắn thẻ là người đăng ký sự kiện để đăng ký người đăng ký này với dịch vụ event_dispatch.
    thẻ:
      - { tên: event_subscriber }
lá cờ cn
Mô-đun tùy chỉnh với mã này đã được bật, phải không?
lá cờ cn
vâng :-) thật kỳ lạ vì tất cả đều hoạt động trước đây, đã kiểm tra tất cả những điều cơ bản đã xóa bộ nhớ cache, v.v. Tôi đã xem qua một số ví dụ và tôi đã thấy một số tên dịch vụ có phần mở rộng . vì vậy tôi cũng đã thử đổi tên dịch vụ thành `parthsub_feeds_modifications.events_subscriber` nhưng cách đó cũng không hiệu quả.
Điểm:0
lá cờ cn

Không có câu trả lời nào cho vấn đề này, tôi đã nhận được lỗi xác thực trước khi lưu trước được kích hoạt, điều đó có nghĩa là mã này không bao giờ được kích hoạ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.