function install_drupal
Same name in other branches
- 7.x includes/install.core.inc \install_drupal()
- 9 core/includes/install.core.inc \install_drupal()
- 8.9.x core/includes/install.core.inc \install_drupal()
- 11.x core/includes/install.core.inc \install_drupal()
Installs Drupal either interactively or via an array of passed-in settings.
The Drupal installation happens in a series of steps, which may be spread out over multiple page requests. Each request begins by trying to determine the last completed installation step (also known as a "task"), if one is available from a previous request. Control is then passed to the task handler, which processes the remaining tasks that need to be run until (a) an error is thrown, (b) a new page needs to be displayed, or (c) the installation finishes (whichever happens first).
Parameters
$class_loader: The class loader. Normally Composer's ClassLoader, as included by the front controller, but may also be decorated.
$settings: An optional array of installation settings. Leave this empty for a normal, interactive, browser-based installation intended to occur over multiple page requests. Alternatively, if an array of settings is passed in, the installer will attempt to use it to perform the installation in a single page request (optimized for the command line) and not send any output intended for the web browser. See install_state_defaults() for a list of elements that are allowed to appear in this array.
callable|null $callback: (optional) A callback to allow command line processes to update a progress bar. The callback is passed the $install_state variable.
See also
4 calls to install_drupal()
- FunctionalTestSetupTrait::doInstall in core/
lib/ Drupal/ Core/ Test/ FunctionalTestSetupTrait.php - Execute the non-interactive installer.
- install.php in core/
install.php - Initiates a browser-based installation of Drupal.
- InstallCommand::install in core/
lib/ Drupal/ Core/ Command/ InstallCommand.php - Installs Drupal with specified installation profile.
- InstallerDeprecatedDriverNameTest::doInstall in core/
tests/ Drupal/ FunctionalTests/ Installer/ InstallerDeprecatedDriverNameTest.php - Execute the non-interactive installer.
File
-
core/
includes/ install.core.inc, line 107
Code
function install_drupal($class_loader, $settings = [], ?callable $callback = NULL) {
global $install_state;
// Initialize the installation state with the settings that were passed in,
// as well as a boolean indicating whether or not this is an interactive
// installation.
$interactive = empty($settings);
$install_state = $settings + [
'interactive' => $interactive,
] + install_state_defaults();
try {
// Begin the page request. This adds information about the current state of
// the Drupal installation to the passed-in array.
install_begin_request($class_loader, $install_state);
// Based on the installation state, run the remaining tasks for this page
// request, and collect any output.
$output = install_run_tasks($install_state, $callback);
} catch (InstallerException $e) {
// In the non-interactive installer, exceptions are always thrown directly.
if (!$install_state['interactive']) {
throw $e;
}
$output = [
'#title' => $e->getTitle(),
'#markup' => $e->getMessage(),
];
}
// After execution, all tasks might be complete, in which case
// $install_state['installation_finished'] is TRUE. In case the last task
// has been processed, remove the global $install_state, so other code can
// reliably check whether it is running during the installer.
// @see \Drupal\Core\Installer\InstallerKernel::installationAttempted()
$state = $install_state;
if (!empty($install_state['installation_finished'])) {
unset($GLOBALS['install_state']);
// If installation is finished ensure any further container rebuilds do not
// use the installer's service provider.
unset($GLOBALS['conf']['container_service_providers']['InstallerServiceProvider']);
}
// All available tasks for this page request are now complete. Interactive
// installations can send output to the browser or redirect the user to the
// next page.
if ($state['interactive']) {
\Drupal::request()->getSession()
->save();
if ($state['parameters_changed']) {
// Redirect to the correct page if the URL parameters have changed.
install_goto(install_redirect_url($state));
}
elseif (isset($output)) {
// Display a page only if some output is available. Otherwise it is
// possible that we are printing a JSON page and theme output should
// not be shown.
install_display_output($output, $state);
}
elseif ($state['installation_finished']) {
// Redirect to the newly installed site.
$finish_url = '';
if (isset($install_state['profile_info']['distribution']['install']['finish_url'])) {
$finish_url = $install_state['profile_info']['distribution']['install']['finish_url'];
}
install_goto($finish_url);
}
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.