trait BootableCommandTrait

Contains helper methods for console commands that boot up Drupal.

Hierarchy

4 files declare their use of BootableCommandTrait
BootableCommandTraitTest.php in core/tests/Drupal/Tests/Core/Command/BootableCommandTraitTest.php
ContentExportCommand.php in core/lib/Drupal/Core/DefaultContent/ContentExportCommand.php
RecipeCommand.php in core/lib/Drupal/Core/Recipe/RecipeCommand.php
RecipeInfoCommand.php in core/lib/Drupal/Core/Recipe/RecipeInfoCommand.php

File

core/lib/Drupal/Core/Command/BootableCommandTrait.php, line 20

Namespace

Drupal\Core\Command
View source
trait BootableCommandTrait {
  
  /**
   * The class loader.
   *
   * @var object
   */
  protected object $classLoader;
  
  /**
   * Boots up a Drupal environment.
   *
   * @return \Drupal\Core\DrupalKernelInterface
   *   The Drupal kernel.
   *
   * @throws \Exception
   *   Exception thrown if kernel does not boot.
   */
  protected function boot() : DrupalKernelInterface {
    $kernel = new DrupalKernel('prod', $this->classLoader);
    $kernel::bootEnvironment();
    $kernel->setSitePath($this->getSitePath());
    Settings::initialize($kernel->getAppRoot(), $kernel->getSitePath(), $this->classLoader);
    $kernel->boot();
    // The request needs to be created with a URL that, even if not actually
    // reachable, at least has a valid *form*, so that Drupal can correctly
    // generate links and URLs.
    $request = Request::create('http://' . basename($kernel->getSitePath()) . '/core/scripts/drupal');
    $kernel->preHandle($request);
    // Try to register an event listener to properly terminate the Drupal kernel
    // when the console application itself terminates. This ensures that
    // `kernel.destructable_services` are destructed, which in turn ensures that
    // the router can be rebuilt if needed, along with other services that
    // perform actions on destruct.
    $event_dispatcher = $kernel->getContainer()
      ->get(EventDispatcherInterface::class);
    if ($kernel instanceof TerminableInterface && $event_dispatcher instanceof ComponentEventDispatcherInterface) {
      $event_dispatcher->addListener(ConsoleEvents::TERMINATE, function () use ($kernel, $request) : void {
        $kernel->terminate($request, new Response());
      });
      $this->getApplication()
        ->setDispatcher($event_dispatcher);
    }
    return $kernel;
  }
  
  /**
   * Gets the site path.
   *
   * Defaults to 'sites/default'. For testing purposes this can be overridden
   * using the DRUPAL_DEV_SITE_PATH environment variable.
   *
   * @return string
   *   The site path to use.
   */
  protected function getSitePath() : string {
    return getenv('DRUPAL_DEV_SITE_PATH') ?: 'sites/default';
  }

}

Members

Title Sort descending Modifiers Object type Summary
BootableCommandTrait::$classLoader protected property The class loader.
BootableCommandTrait::boot protected function Boots up a Drupal environment.
BootableCommandTrait::getSitePath protected function Gets the site path.

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