function InstallCommand::install

Same name in other branches
  1. 9 core/lib/Drupal/Core/Command/InstallCommand.php \Drupal\Core\Command\InstallCommand::install()
  2. 8.9.x core/lib/Drupal/Core/Command/InstallCommand.php \Drupal\Core\Command\InstallCommand::install()
  3. 10 core/lib/Drupal/Core/Command/InstallCommand.php \Drupal\Core\Command\InstallCommand::install()

Installs Drupal with specified installation profile.

Parameters

object $class_loader: The class loader.

\Symfony\Component\Console\Style\SymfonyStyle $io: The Symfony output decorator.

string $profile: The installation profile to use.

string $langcode: The language to install the site in.

string $site_path: The path to install the site to, like 'sites/default'.

string $site_name: The site name.

string $recipe: The recipe to use for installing.

Return value

int The command exit status.

Throws

\Exception Thrown when failing to create the $site_path directory or settings.php.

1 call to InstallCommand::install()
InstallCommand::execute in core/lib/Drupal/Core/Command/InstallCommand.php

File

core/lib/Drupal/Core/Command/InstallCommand.php, line 164

Class

InstallCommand
Installs a Drupal site for local testing/development.

Namespace

Drupal\Core\Command

Code

protected function install($class_loader, SymfonyStyle $io, $profile, $langcode, $site_path, $site_name, string $recipe) {
    $sqliteDriverNamespace = 'Drupal\\sqlite\\Driver\\Database\\sqlite';
    $password = Crypt::randomBytesBase64(12);
    $parameters = [
        'interactive' => FALSE,
        'site_path' => $site_path,
        'parameters' => [
            'profile' => $profile,
            'langcode' => $langcode,
        ],
        'forms' => [
            'install_settings_form' => [
                'driver' => $sqliteDriverNamespace,
                $sqliteDriverNamespace => [
                    'database' => $site_path . '/files/.sqlite',
                ],
            ],
            'install_configure_form' => [
                'site_name' => $site_name,
                'site_mail' => 'drupal@localhost',
                'account' => [
                    'name' => 'admin',
                    'mail' => 'admin@localhost',
                    'pass' => [
                        'pass1' => $password,
                        'pass2' => $password,
                    ],
                ],
                'enable_update_status_module' => TRUE,
                // \Drupal\Core\Render\Element\Checkboxes::valueCallback() requires
                // NULL instead of FALSE values for programmatic form submissions to
                // disable a checkbox.
'enable_update_status_emails' => NULL,
            ],
        ],
    ];
    if ($recipe) {
        $parameters['parameters']['recipe'] = $recipe;
    }
    // Create the directory and settings.php if not there so that the installer
    // works.
    if (!is_dir($site_path)) {
        if ($io->isVerbose()) {
            $io->writeln("Creating directory: {$site_path}");
        }
        if (!mkdir($site_path, 0775)) {
            throw new \RuntimeException("Failed to create directory {$site_path}");
        }
    }
    if (!file_exists("{$site_path}/settings.php")) {
        if ($io->isVerbose()) {
            $io->writeln("Creating file: {$site_path}/settings.php");
        }
        if (!copy('sites/default/default.settings.php', "{$site_path}/settings.php")) {
            throw new \RuntimeException("Copying sites/default/default.settings.php to {$site_path}/settings.php failed.");
        }
    }
    require_once 'core/includes/install.core.inc';
    $progress_bar = $io->createProgressBar();
    install_drupal($class_loader, $parameters, function ($install_state) use ($progress_bar) {
        static $started = FALSE;
        if (!$started) {
            $started = TRUE;
            // We've already done 1.
            $progress_bar->setFormat("%current%/%max% [%bar%]\n%message%\n");
            $progress_bar->setMessage(t('Installing @drupal', [
                '@drupal' => drupal_install_profile_distribution_name(),
            ]));
            $tasks = install_tasks($install_state);
            $progress_bar->start(count($tasks) + 1);
        }
        $tasks_to_perform = install_tasks_to_perform($install_state);
        $task = current($tasks_to_perform);
        if (isset($task['display_name'])) {
            $progress_bar->setMessage($task['display_name']);
        }
        $progress_bar->advance();
    });
    $success_message = t('Congratulations, you installed @drupal!', [
        '@drupal' => drupal_install_profile_distribution_name(),
        '@name' => 'admin',
        '@pass' => $password,
    ], [
        'langcode' => $langcode,
    ]);
    $progress_bar->setMessage('<info>' . $success_message . '</info>');
    $progress_bar->display();
    $progress_bar->finish();
    $io->writeln('<info>Username:</info> admin');
    $io->writeln("<info>Password:</info> {$password}");
    return 0;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.