BootableCommandTrait.php
Namespace
Drupal\Core\CommandFile
-
core/
lib/ Drupal/ Core/ Command/ BootableCommandTrait.php
View source
<?php
declare (strict_types=1);
namespace Drupal\Core\Command;
use Drupal\Core\DrupalKernel;
use Drupal\Core\DrupalKernelInterface;
use Drupal\Core\Site\Settings;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\EventDispatcher\EventDispatcherInterface as ComponentEventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\TerminableInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* Contains helper methods for console commands that boot up Drupal.
*/
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();
$request = Request::createFromGlobals();
$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';
}
}
Traits
Title | Deprecated | Summary |
---|---|---|
BootableCommandTrait | Contains helper methods for console commands that boot up Drupal. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.