Same name and namespace in other branches
  1. 10 core/lib/Drupal/Core/Extension/module.api.php \hook_install()
  2. 4.7.x developer/hooks/install.php \hook_install()
  3. 5.x developer/hooks/install.php \hook_install()
  4. 6.x developer/hooks/install.php \hook_install()
  5. 7.x modules/system/system.api.php \hook_install()
  6. 9 core/lib/Drupal/Core/Extension/module.api.php \hook_install()

Perform setup tasks when the module is installed.

If the module implements hook_schema(), the database tables will be created before this hook is fired.

If the module provides a MODULE.routing.yml or alters routing information these changes will not be available when this hook is fired. If up-to-date router information is required, for example to use \Drupal\Core\Url, then (preferably) use hook_modules_installed() or rebuild the router in the hook_install() implementation.

Implementations of this hook are by convention declared in the module's .install file. The implementation can rely on the .module file being loaded. The hook will only be called when a module is installed. The module's schema version will be set to the module's greatest numbered update hook. Because of this, any time a hook_update_N() is added to the module, this function needs to be updated to reflect the current version of the database schema.

See the Schema API documentation for details on hook_schema and how database tables are defined.

Note that since this function is called from a full bootstrap, all functions (including those in modules enabled by the current page request) are available when this hook is called. Use cases could be displaying a user message, or calling a module function necessary for initial setup, etc.

Please be sure that anything added or modified in this function that can be removed during uninstall should be removed with hook_uninstall().

Parameters

bool $is_syncing: TRUE if the module is being installed as part of a configuration import. In these cases, your hook implementation needs to carefully consider what changes, if any, it should make. For example, it should not make any changes to configuration objects or entities.

See also

\Drupal\Core\Config\ConfigInstallerInterface::isSyncing

hook_schema()

\Drupal\Core\Extension\ModuleInstaller::install()

hook_uninstall()

hook_modules_installed()

Related topics

41 functions implement hook_install()

Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.

block_install in core/modules/block/block.install
Implements hook_install().
block_place_install in core/modules/block_place/block_place.install
Implements hook_install().
comment_install in core/modules/comment/comment.install
Implements hook_install().
contact_storage_test_install in core/modules/contact/tests/modules/contact_storage_test/contact_storage_test.install
Implements hook_install().
content_translation_install in core/modules/content_translation/content_translation.install
Implements hook_install().

... See full list

2 invocations of hook_install()
ModuleInstaller::install in core/lib/Drupal/Core/Extension/ModuleInstaller.php
Installs a given list of modules.
NormalizerTestBase::setUp in core/modules/serialization/tests/src/Kernel/NormalizerTestBase.php

File

core/lib/Drupal/Core/Extension/module.api.php, line 242
Hooks related to module and update systems.

Code

function hook_install($is_syncing) {

  // Set general module variables.
  \Drupal::state()
    ->set('mymodule.foo', 'bar');
}