it-swarm.asia

Apakah hook_install () dipanggil sebelum atau setelah konfigurasi file yml dimuat?

Dalam Drupal 8, selama pemasangan modul, apakah hook_install() dipanggil sebelum atau setelah memuat file .yml di config/install?

Saya telah menemukan modul yang menggunakan keduanya (yang sepertinya merupakan ide buruk sendiri) dan saya mencoba untuk menelusuri penyebab ketidakkonsistenan dalam konfigurasi tepat setelah modul diinstal.

4
acrosman

Ketika Drupal memasang modul, pertama instal konfigurasi default modul, lalu aktifkan hook_install(). Ini terbukti dari ModuleInstaller::install() , yang berisi kode berikut.

  // 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');

Baris pertama yang saya kutip adalah untuk menginstal konfigurasi default, sedangkan yang terakhir adalah untuk memanggil hook_install().

6
kiamlaluno