Регистрация статической миграции модуля Migrate, реализация hook_migrate_api()

Главные вкладки

Аватар пользователя alexo alexo 22 мая 2018 в 17:19

Здравствуйте!
Пытаюсь добавить хук для статической миграции в файл mymigrate.migrate.inc своего модуля Mymigrate.
Но не все понятно на некоторых шагах.
Ниже привожу код хука, для модуля Mymigrate
группы миграций с машинным именем my_group_machname,
видимое имя "My UI name for migrations group",
сами миграции и классы соответсвенно 1- my_article_migration_name, класс - my_class_for_article,
2- ая миграция my_mytype_migration_name, класс - my_class_for_mytype, можете ли Вы подсказать, что неправильно?
И для каждой новой миграции мне нужно будет добавлять аналогичный код как в 'migrations' ?

<?php function mymigrate_migrate_api() {
  
$api = array(
    
'api' => 2,
    
'groups' => array(
      
'my_group_machname' => array(
        
'title' => t('My UI name for migrations groups'),
      ),
    ),
'migrations' => array(
      
'my_article_migration_name' => array(
        
'class_name' => 'my_class_for_article',
        
'group_name' => 'my_group_machname',
      ),
      
'my_mytype_migration_name' => array(
        
'class_name' => 'my_class_for_mytype',
        
'group_name' => 'my_group_machname',
      ),
    ),
  );
  return 
$api;
}
?>

Пользуюсь инструкцией согласно статье Migration and group registration и этой рекомендацией в разделе Реализация hook_migrate_api().
Ниже привожу попытку подробного разбора и вопросы, но возможно уже где-то есть другое более подробное объяснение по этому хуку кроме двух вышеуказанных и самого файла beer.inc в модуле Migrate?

1) Для регистрации хука используют функцию с именем, состоящим из имени модуля, подчеркивания, имени хука.
Получается
function mymigrate_migrate_api() {

2)Далее мне встречалось 2 варианта
а)

return array(
    'api' => 2,

б)

 $api = array(
    'api' => 2,

тогда в конце добавляется

return $api;
 

Есть для меня принципиальное отличие в них? В обоих случаях я просто указываю поддерживаемую версию модуля migrate?

В одной из версий (в этом видео на 12-20 ) на этом и ограничилось создание хука
т.е все выглядело как

function mymigrate_migrate_api() {
return array(
    'api' => 2,
 );
}

Действиетльно это достачный минимум и можно после добавления этого кода переходить к классам?

3)Если все же более подробно прописывать все что касается хука, то далее по группам
В описании написано:
"It's recommended that you explicitly assign your migrations to a migration group (if you don't, they will be in the 'default' group). Groups can be registered in the API array by including a 'groups' key, whose value is an array keyed by the group machine name and the value an array of arguments for the group. "

Верно ли я понимаю, что, если я не укажу никакую группу, то миграция будет добавлена в группу по умолчанию?
Либо я могу зарегистрировать группу в массиве API за счет включения ключа
'groups' со значением массива с ключом - машинным именем группы.
(возможно что-то путаю в переводе этого длинного предложения)

и в другой рекомендации
groups: an array keyed by group machine names, with arrays of arguments (including in particular 'title', the user-visible name of the group).
(перевод - "Массив с ключами, являющимися машинными именами групп, с массивами аргументов, включая в частности 'title' и и видимое пользователям имя группы")

"

на этом этапе у меня три вопроса:
3.1. Если не хочу создавать отдельную группу, то чтобы миграция добавиласьв группу по умолчанию достаточно написать

'groups' => array(
            ),

3.2. Еслия я буду создавать группу, нужно ли мне заранее создавать машинное имя группы миграций и как?
3.3. Если машинное имя группы будет my_group_machname, видимое в UI имя "My UI name for migrations group"
то как это будет выглядеть в коде?

'groups' => array(
      'my_group_machname' => array(
        'title' => t('My UI name for migrations groupй'),
      ),
    ),

4.migrations: migrations: an array keyed by migration machine names, with arrays of arguments (including in particular 'class_name', the name of the Migration class you've implemented).
(перевод: Массив с ключом являющемся машинным именем миграции, с массивом аргументов, включая в частности 'class_name', имя класса миграции, которое вы назначили.)

The 'migrations' key should be an array, keyed by the migration machine name, with the value an array of arguments. 'class_name' is the one required argument (although 'group_name' is recommended) - any others are class-specific arguments, and are passed in the $arguments array to the class constructor.
(перевод: Ключ 'migrations' должен быть массивом, с ключом являющимся машинным именем миграции, со значением являющимся массивом аргументов.
'class_name' это один из обязательно требуемых аргументов, также рекомендуется еще и 'group_name' , все больные являются аргументами, специфичными для отдельных классов, и передаются в массиве $arguments конструктору)

Если у меня будет 1 миграция для типа материала Article (имя миграции будет my_article_migration_name, класс - my_class_for_article), вторая для типа материала "Mytype" (имя миграции будет my_mytype_migration_name, класс - my_class_for_mytype) , то код будет следующий?

'migrations' => array(
      'my_article_migration_name' => array(
        'class_name' => 'my_class_for_article',
        'group_name' => 'my_group_machname',
      ),
      'my_mytype_migration_name' => array(
        'class_name' => 'my_class_for_mytype',
        'group_name' => 'my_group_machname',
      ),
    ),
  );
  return $api;
}