autoload = $autoload; $this->drupalFinder = $drupalFinder; } public function boot() { $output = new ConsoleOutput(); $input = new ArrayInput([]); $io = new DrupalStyle($input, $output); $argvInputReader = new ArgvInputReader(); $command = $argvInputReader->get('command'); $uri = $argvInputReader->get('uri'); $debug = $argvInputReader->get('debug', false); if ($debug) { $binaryPath = $this->drupalFinder->getVendorDir() . '/drupal/console/bin/drupal'; $io->writeln("Per-Site path: $binaryPath"); $io->newLine(); } if (!class_exists('Drupal\Core\DrupalKernel')) { $io->error('Class Drupal\Core\DrupalKernel does not exist.'); $drupal = new DrupalConsoleCore( $this->drupalFinder->getComposerRoot(), $this->drupalFinder->getDrupalRoot() ); return $drupal->boot(); } try { // Add support for Acquia Dev Desktop sites. // Try both Mac and Windows home locations. $home = getenv('HOME'); if (empty($home)) { $home = getenv('USERPROFILE'); } if (!empty($home)) { $devDesktopSettingsDir = $home . "/.acquia/DevDesktop/DrupalSettings"; if (file_exists($devDesktopSettingsDir)) { $_SERVER['DEVDESKTOP_DRUPAL_SETTINGS_DIR'] = $devDesktopSettingsDir; } } $rebuildServicesFile = false; if ($command=='cache:rebuild' || $command=='cr') { $rebuildServicesFile = true; } if ($debug) { $io->writeln('➤ Creating request'); } $_SERVER['HTTP_HOST'] = parse_url($uri, PHP_URL_HOST); $_SERVER['SERVER_PORT'] = null; $_SERVER['REQUEST_URI'] = '/'; $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; $_SERVER['REQUEST_METHOD'] = 'GET'; $_SERVER['SERVER_SOFTWARE'] = null; $_SERVER['HTTP_USER_AGENT'] = null; $_SERVER['PHP_SELF'] = $_SERVER['REQUEST_URI'] . 'index.php'; $_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF']; $_SERVER['SCRIPT_FILENAME'] = $this->drupalFinder->getDrupalRoot() . '/index.php'; $request = Request::createFromGlobals(); if ($debug) { $io->writeln("\r\033[K\033[1A\r"); $io->writeln('➤ Creating Drupal kernel'); } $drupalKernel = DrupalKernel::createFromRequest( $request, $this->autoload, 'prod', false, $this->drupalFinder->getDrupalRoot() ); if ($debug) { $io->writeln("\r\033[K\033[1A\r"); $io->writeln('➤ Registering dynamic services'); } $drupalKernel->addServiceModifier( new DrupalServiceModifier( $this->drupalFinder->getComposerRoot(), $this->drupalFinder->getDrupalRoot(), 'drupal.command', 'drupal.generator', $rebuildServicesFile ) ); if ($debug) { $io->writeln("\r\033[K\033[1A\r"); $io->writeln('➤ Rebuilding container'); } $drupalKernel->invalidateContainer(); $drupalKernel->rebuildContainer(); $drupalKernel->boot(); if ($debug) { $io->writeln("\r\033[K\033[1A\r"); } $container = $drupalKernel->getContainer(); $container->set( 'console.root', $this->drupalFinder->getComposerRoot() ); AnnotationRegistry::registerLoader([$this->autoload, "loadClass"]); $configuration = $container->get('console.configuration_manager') ->getConfiguration(); $container->get('console.translator_manager') ->loadCoreLanguage( $configuration->get('application.language'), $this->drupalFinder->getComposerRoot() ); $consoleExtendConfigFile = $this->drupalFinder->getComposerRoot() . DRUPAL_CONSOLE .'/extend.console.config.yml'; if (file_exists($consoleExtendConfigFile)) { $container->get('console.configuration_manager') ->importConfigurationFile($consoleExtendConfigFile); } $container->get('console.renderer') ->setSkeletonDirs( [ $this->drupalFinder->getComposerRoot().DRUPAL_CONSOLE.'/templates/', $this->drupalFinder->getComposerRoot().DRUPAL_CONSOLE_CORE.'/templates/' ] ); return $container; } catch (\Exception $e) { if ($command == 'list') { $io->error($e->getMessage()); } $drupal = new DrupalConsoleCore( $this->drupalFinder->getComposerRoot(), $this->drupalFinder->getDrupalRoot() ); $container = $drupal->boot(); $container->set('class_loader', $this->autoload); return $container; } } }