migrationPlugin = $migration_plugin; $this->menuLinkManager = $menu_link_manager; $this->menuLinkStorage = $menu_link_storage; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) { $migration_configuration['migration'][] = $migration->id(); return new static( $configuration, $plugin_id, $plugin_definition, $container->get('plugin.manager.migrate.process')->createInstance('migration', $migration_configuration, $migration), $container->get('plugin.manager.menu.link'), $container->get('entity.manager')->getStorage('menu_link_content') ); } /** * {@inheritdoc} * * Find the parent link GUID. */ public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { $parent_id = array_shift($value); if (!$parent_id) { // Top level item. return ''; } try { $already_migrated_id = $this ->migrationPlugin ->transform($parent_id, $migrate_executable, $row, $destination_property); if ($already_migrated_id && ($link = $this->menuLinkStorage->load($already_migrated_id))) { return $link->getPluginId(); } } catch (MigrateSkipRowException $e) { } if (isset($value[1])) { list($menu_name, $parent_link_path) = $value; $url = Url::fromUserInput("/$parent_link_path"); if ($url->isRouted()) { $links = $this->menuLinkManager->loadLinksByRoute($url->getRouteName(), $url->getRouteParameters(), $menu_name); if (count($links) == 1) { /** @var \Drupal\Core\Menu\MenuLinkInterface $link */ $link = reset($links); return $link->getPluginId(); } } } throw new MigrateSkipRowException(sprintf("No parent link found for plid '%d' in menu '%s'.", $parent_id, $value[0])); } }