trait BootableCommandTrait
Contains helper methods for console commands that boot up Drupal.
Hierarchy
- trait \Drupal\Core\Command\BootableCommandTrait
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\CommandView 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.