diff --git a/core/core.services.yml b/core/core.services.yml index 07f17b975b1b620196d02ff924ea75b3f009ac49..90c40a9f606e12b82b70916590e18ed33ee78ab9 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -225,6 +225,8 @@ services: synchronized: true request_stack: class: Symfony\Component\HttpFoundation\RequestStack + tags: + - { name: persist } event_dispatcher: class: Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher arguments: ['@service_container'] diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index 616637c667a2500c04b0ac541776002e16b5323d..aa158a2823f3adeedfa4124b292e24c967592eb4 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -366,6 +366,7 @@ function install_begin_request(&$install_state) { $container = $kernel->getContainer(); $container->enterScope('request'); $container->set('request', $request, 'request'); + $container->get('request_stack')->push($request); // Register the file translation service. if (isset($GLOBALS['config']['locale.settings']['translation.path'])) { diff --git a/core/includes/install.inc b/core/includes/install.inc index 8ba52b60937b5b5c911a677318c0f2191508d3b5..e7e520676e7feb07b1dbe10f8558119c85c2da51 100644 --- a/core/includes/install.inc +++ b/core/includes/install.inc @@ -646,6 +646,7 @@ function drupal_install_system($install_state) { if ($request) { $kernel->getContainer()->enterScope('request'); $kernel->getContainer()->set('request', $request, 'request'); + $kernel->getContainer()->get('request_stack')->push($request); } $system_path = drupal_get_path('module', 'system'); diff --git a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php index 0d80c36dd5a160a842312d1ffdec435c546e7007..6558f209200bdf30d546ede5c1d53282980809e3 100644 --- a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php +++ b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php @@ -1140,6 +1140,12 @@ private function prepareEnvironment() { protected function rebuildContainer($environment = 'testing') { // Preserve the request object after the container rebuild. $request = \Drupal::request(); + // When called from InstallerTestBase, the current container is the minimal + // container from TestBase::prepareEnvironment(), which does not contain a + // request stack. + if (\Drupal::getContainer()->initialized('request_stack')) { + $request_stack = \Drupal::service('request_stack'); + } $this->kernel = new DrupalKernel($environment, drupal_classloader(), FALSE); $this->kernel->boot(); @@ -1148,6 +1154,12 @@ protected function rebuildContainer($environment = 'testing') { $this->container = \Drupal::getContainer(); // The current user is set in TestBase::prepareEnvironment(). $this->container->set('request', $request); + if (isset($request_stack)) { + $this->container->set('request_stack', $request_stack); + } + else { + $this->container->get('request_stack')->push($request); + } $this->container->get('current_user')->setAccount(\Drupal::currentUser()); } diff --git a/core/update.php b/core/update.php index 8f7c325707b270ae99f92ad8e4364459dcaed441..45904a20b7632e6ffb43f45de688ea4ccdf744ec 100644 --- a/core/update.php +++ b/core/update.php @@ -340,7 +340,9 @@ function update_task_list($active = NULL) { $kernel = new DrupalKernel('update', drupal_classloader(), FALSE); $kernel->boot(); $request = Request::createFromGlobals(); -\Drupal::getContainer()->set('request', $request); +$container = \Drupal::getContainer(); +$container->set('request', $request); +$container->get('request_stack')->push($request); // Determine if the current user has access to run update.php. drupal_bootstrap(DRUPAL_BOOTSTRAP_PAGE_CACHE);