Рейтинг:1

Использовать дериватор в Drupal Migration yml

флаг in

Я пытаюсь использовать ключ производного в yml миграции, чтобы динамически создавать миграции для каждого пакета типа объекта (Drupal 9).

Я читаю это и я пытаюсь использовать ключ деривера, чтобы указать на класс деривера в моей миграции. Однако кажется, что ключ производного просто игнорируется.

Есть ли что-то еще, что мне нужно сделать, кроме использования ключа дериватора и создания класса-деривата, наследуемого от Drupal\Component\Plugin\Derivative\DeriverBase?

Это yml миграции:

идентификатор: person_roles
метка: Импорт 
производный: Drupal\my_module\PersonRoleImportDeriver
миграция_группа: моя_группа
источник:
  плагин: адрес
  data_fetcher_plugin: http
  data_parser_plugin: xml
  URL-адреса: public://this.xml
  поля:
    -
      имя: position_name
      метка: имя роли человека
      селектор: функция
  идентификаторы:
    position_name:
      тип: строка
пункт назначения:
  плагин: 'сущность: my_entity'
процесс:
  имя:
    -
      плагин: skip_on_empty
      метод: строка
      источник: position_name
      сообщение: «Пустой исходный текст»
    -
      плагин: make_unique_entity_field
      тип объекта: my_entity
      мигрировал: правда
      поле: имя
Рейтинг:1
флаг ph

Это плагин, поэтому вам нужно соблюдать структуру каталогов и пространство имен плагинов.

Ваш класс должен быть в my_module/src/Plugin/мигрировать и иметь пространство имен Drupal\мой_модуль\Плагин\мигрировать.

Stefan Korn avatar
флаг in
Хм, я думаю, что Deriver - это не плагин? Хотя у него нет аннотации. В любом случае, если я помещу производный файл в папку с плагинами, он все равно не будет вызван.
Lambic avatar
флаг ph
Итак, ваш класс-наследник реализует getDerivativeDefinitions(), и этот метод никогда не вызывается?
Stefan Korn avatar
флаг in
Да, похоже, это проблема.
Lambic avatar
флаг ph
Не уверен, почему это было бы, я использую тот же шаблон. Включает ли ваш класс MigrationDeriverTrait?
Stefan Korn avatar
флаг in
кажется, где живет конфигурация yml для миграции. Если он находится в папке config/install, производный файл не будет пойман, но если он находится в папке миграции, он будет работать. Сам класс Deriver может находиться где угодно в пространстве имен. Я просто сейчас понимаю разницу между конфигурацией/установкой и миграцией в этом случае.
Lambic avatar
флаг ph
Интересно, мы довольно рано переключились на использование каталога миграции.

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

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