3 namespace Drupal\Console\Bootstrap;
5 use Symfony\Component\Finder\Finder;
6 use Symfony\Component\HttpFoundation\Request;
7 use Drupal\Core\DependencyInjection\ServiceModifierInterface;
8 use Drupal\Console\Core\Utils\DrupalFinder;
11 * Trait DrupalKernelTrait
13 * @package Drupal\Console\Bootstrap
15 trait DrupalKernelTrait
18 * @var ServiceModifierInterface[]
20 protected $serviceModifiers = [];
25 public static function createFromRequest(Request $request, $class_loader, $environment, $allow_dumping = true, $app_root = null)
27 $kernel = new static($environment, $class_loader, $allow_dumping, $app_root);
28 static::bootEnvironment($app_root);
29 $kernel->initializeSettings($request);
35 * @param \Drupal\Core\DependencyInjection\ServiceModifierInterface $serviceModifier
37 public function addServiceModifier(ServiceModifierInterface $serviceModifier)
39 $this->serviceModifiers[] = $serviceModifier;
45 protected function getContainerBuilder()
47 $container = parent::getContainerBuilder();
48 foreach ($this->serviceModifiers as $serviceModifier) {
49 $serviceModifier->alter($container);
58 public function discoverServiceProviders()
60 // Discover Drupal service providers
61 parent::discoverServiceProviders();
63 // Discover Drupal Console service providers
64 $this->discoverDrupalConsoleServiceProviders();
67 public function getContainerKey()
69 return hash("sha256", $this->getContainerCacheKey());
72 public function discoverDrupalConsoleServiceProviders()
74 $drupalFinder = new DrupalFinder();
75 $drupalFinder->locateRoot(getcwd());
77 // Load DrupalConsole services
78 $this->addDrupalConsoleServices($drupalFinder->getComposerRoot());
80 // Load DrupalConsole services
81 $this->addDrupalConsoleConfigServices($drupalFinder->getComposerRoot());
83 // Load DrupalConsole extended services
84 $this->addDrupalConsoleExtendedServices($drupalFinder->getComposerRoot());
86 // Add DrupalConsole module(s) services
87 $this->addDrupalConsoleModuleServices($drupalFinder->getDrupalRoot());
89 // Add DrupalConsole theme(s) services
90 $this->addDrupalConsoleThemeServices($drupalFinder->getDrupalRoot());
93 protected function addDrupalConsoleServices($root)
95 $servicesFiles = array_filter(
97 $root. DRUPAL_CONSOLE_CORE . 'services.yml',
98 $root. DRUPAL_CONSOLE . 'uninstall.services.yml',
99 $root. DRUPAL_CONSOLE . 'services.yml'
102 return file_exists($file);
106 $this->addDrupalServiceFiles($servicesFiles);
109 protected function addDrupalConsoleConfigServices($root)
111 $finder = new Finder();
116 '%s/config/services',
122 foreach ($finder as $file) {
123 $servicesFiles[] = $file->getPathname();
126 $this->addDrupalServiceFiles($servicesFiles);
129 protected function addDrupalConsoleExtendedServices($root)
131 $servicesFiles = array_filter(
133 $root . DRUPAL_CONSOLE . 'extend.console.services.yml',
134 $root . DRUPAL_CONSOLE . 'extend.console.uninstall.services.yml',
137 return file_exists($file);
141 $this->addDrupalServiceFiles($servicesFiles);
144 protected function addDrupalConsoleModuleServices($root)
147 $moduleFileNames = $this->getModuleFileNames();
148 foreach ($moduleFileNames as $module => $filename) {
149 $servicesFile = $root . '/' .
151 "/console.services.yml";
152 if (file_exists($servicesFile)) {
153 $servicesFiles[] = $servicesFile;
157 $this->addDrupalServiceFiles($servicesFiles);
160 public function addDrupalServiceFiles($servicesFiles)
162 $this->serviceYamls['site'] = array_merge(
163 $this->serviceYamls['site'],
168 protected function addDrupalConsoleThemeServices($root)
170 $themes = $this->getThemeFileNames();
173 private function getThemeFileNames()
175 $extensions = $this->getConfigStorage()->read('core.extension');
177 return isset($extensions['theme']) ? $extensions['theme'] : [];