it-swarm.com.de

Wird hook_install () vor oder nach dem Laden von Konfigurations-XML-Dateien aufgerufen?

In Drupal 8 wird während der Modulinstallation hook_install() vor oder nach dem Laden der .yml-Dateien in config/install aufgerufen?

Ich habe ein Modul gefunden, das beides verwendet (was für sich genommen eine schlechte Idee zu sein scheint), und ich versuche, die Ursache für eine Inkonsistenz in der Konfiguration direkt nach der Installation des Moduls zu ermitteln.

4
acrosman

Wenn Drupal ein Modul installiert, installiert es zuerst die Standardkonfiguration des Moduls und ruft dann dessen hook_install() auf. Dies ist aus ModuleInstaller::install() ersichtlich). , der den folgenden Code enthält.

  // Install default configuration of the module.
  $config_installer = \Drupal::service('config.installer');
  if ($sync_status) {
    $config_installer
    ->setSyncing(TRUE)
      ->setSourceStorage($source_storage);
  }
  \Drupal::service('config.installer')->installDefaultConfig('module', $module);

  // If the module has no current updates, but has some that were
  // previously removed, set the version to the value of
  // hook_update_last_removed().
  if ($last_removed = $this->moduleHandler->invoke($module, 'update_last_removed')) {
    $version = max($version, $last_removed);
  }
  drupal_set_installed_schema_version($module, $version);

  // Ensure that all post_update functions are registered already.
  /** @var \Drupal\Core\Update\UpdateRegistry $post_update_registry */
  $post_update_registry = \Drupal::service('update.post_update_registry');
  $post_update_registry->registerInvokedUpdates($post_update_registry->getModuleUpdateFunctions($module));

  // Record the fact that it was installed.
  $modules_installed[] = $module;

  // Drupal's stream wrappers needs to be re-registered in case a
  // module-provided stream wrapper is used later in the same request. In
  // particular, this happens when installing Drupal via Drush, as the
  // 'translations' stream wrapper is provided by Interface Translation
  // module and is later used to import translations.
  \Drupal::service('stream_wrapper_manager')->register();

  // Update the theme registry to include it.
  drupal_theme_rebuild();

  // Modules can alter theme info, so refresh theme data.
  // @todo ThemeHandler cannot be injected into ModuleHandler, since that
  //   causes a circular service dependency.
  // @see https://www.drupal.org/node/2208429
  \Drupal::service('theme_handler')->refreshInfo();

  // In order to make uninstalling transactional if anything uses routes.
  \Drupal::getContainer()->set('router.route_provider.old', \Drupal::service('router.route_provider'));
  \Drupal::getContainer()->set('router.route_provider', \Drupal::service('router.route_provider.lazy_builder'));

  // Allow the module to perform install tasks.
  $this->moduleHandler->invoke($module, 'install');

Die ersten Zeilen, die ich zitiert habe, dienen zum Installieren der Standardkonfiguration, während die letzte zum Aufrufen von hook_install() dient.

6
kiamlaluno