protected DrupalKernel::initializeContainer()
Initializes the service container.
Return value
\Symfony\Component\DependencyInjection\ContainerInterface
File
- core/lib/Drupal/Core/DrupalKernel.php, line 830
Class
- DrupalKernel
- The DrupalKernel class is the core of Drupal itself.
Namespace
Drupal\Core
Code
protected function initializeContainer() { $this->containerNeedsDumping = FALSE; $session_started = FALSE; if (isset($this->container)) { // Save the id of the currently logged in user. if ($this->container->initialized('current_user')) { $current_user_id = $this->container->get('current_user')->id(); } // If there is a session, close and save it. if ($this->container->initialized('session')) { $session = $this->container->get('session'); if ($session->isStarted()) { $session_started = TRUE; $session->save(); } unset($session); } } // If we haven't booted yet but there is a container, then we're asked to // boot the container injected via setContainer(). // @see \Drupal\KernelTests\KernelTestBase::setUp() if (isset($this->container) && !$this->booted) { $container = $this->container; } // If the module list hasn't already been set in updateModules and we are // not forcing a rebuild, then try and load the container from the cache. if (empty($this->moduleList) && !$this->containerNeedsRebuild) { $container_definition = $this->getCachedContainerDefinition(); } // If there is no container and no cached container definition, build a new // one from scratch. if (!isset($container) && !isset($container_definition)) { $container = $this->compileContainer(); // Only dump the container if dumping is allowed. This is useful for // KernelTestBase, which never wants to use the real container, but always // the container builder. if ($this->allowDumping) { $dumper = new $this->phpArrayDumperClass($container); $container_definition = $dumper->getArray(); } } // The container was rebuilt successfully. $this->containerNeedsRebuild = FALSE; // Only create a new class if we have a container definition. if (isset($container_definition)) { $class = Settings::get('container_base_class', '\Drupal\Core\DependencyInjection\Container'); $container = new $class($container_definition); } $this->attachSynthetic($container); $this->container = $container; if ($session_started) { $this->container->get('session')->start(); } // The request stack is preserved across container rebuilds. Reinject the // new session into the master request if one was present before. if (($request_stack = $this->container->get('request_stack', ContainerInterface::NULL_ON_INVALID_REFERENCE))) { if ($request = $request_stack->getMasterRequest()) { if ($request->hasSession()) { $request->setSession($this->container->get('session')); } } } if (!empty($current_user_id)) { $this->container->get('current_user')->setInitialAccountId($current_user_id); } \Drupal::setContainer($this->container); // If needs dumping flag was set, dump the container. if ($this->containerNeedsDumping && !$this->cacheDrupalContainer($container_definition)) { $this->container->get('logger.factory')->get('DrupalKernel')->error('Container cannot be saved to cache.'); } return $this->container; }
Please login to continue.