迁移预导入事件/事件监听器

时间:2017-05-18 08:38:14

标签: drupal drupal-8 migrate event-listener

所以我有一个自定义的Drupal 8迁移,我们从XML导入节点 - 一切都很棒。现在我想添加一个预导入功能,以便在迁移之前。在Drupal 7 Migrate中有preImport() - 什么是Drupal 8方法?我发现这篇关于Events added to migration process的文章,但我仍然不清楚如何继续...感谢任何提示!

1 个答案:

答案 0 :(得分:1)

您需要创建自己的活动订阅者,此处为简短指南:https://www.chapterthree.com/blog/how-to-register-event-subscriber-drupal8

这是EventSubscriber的一个具体示例(my_migration / src / EventSubscriber / PreImportEvent.php):

<?php

namespace Drupal\my_migration\EventSubscriber;

use Drupal\migrate\Event\MigrateEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Class PreImportEvent
 *
 * @package Drupal\my_migration\EventSubscriber
 */
class PreImportEvent implements EventSubscriberInterface {

  /**
   * @return mixed
   */
  public static function getSubscribedEvents() {
    $events[MigrateEvents::PRE_IMPORT][] = [
      'preImport',
      0,
    ];
    return $events;
  }

  /**
   * @param $event
   */
  public function preImport($event) {
    // Do whatever you want with $event
  }

}

现在您需要为EventSubscriber注册服务(my_migration / my_migration.services.yml):

services:
  my_migration.subscriber.pre_import:
    class: Drupal\my_migration\EventSubscriber\PreImportEvent
    tags:
      - { name: event_subscriber }

注意:如果您需要更改每个字段的迁移,最好使用进程插件(https://www.drupal.org/docs/8/api/migrate-api/migrate-process-plugins)。