Drupal 8、モジュールのインストール時に、config/installで.ymlファイルをロードする前または後に hook_install()
が呼び出されますか?
両方を使用しているモジュール(それ自体は悪い考えのようです)を見つけました。モジュールをインストールした直後に、構成の不整合の原因を突き止めようとしています。
Drupalモジュールをインストールすると、最初にモジュールのデフォルト構成がインストールされ、次にhook_install()
が呼び出されます。これは ModuleInstaller::install()
から明らかです。 。次のコードが含まれています。
// 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');
最初に引用した行はデフォルト設定をインストールするためのもので、最後の行はhook_install()
を呼び出すためのものです。