diff --git a/core/core.services.yml b/core/core.services.yml index a6e3a3e..868c263 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -498,6 +498,10 @@ services: url_generator: class: Drupal\Core\Routing\CachedUrlGenerator arguments: ['@url_generator.uncached', '@cache.url_generator', '@language_manager', '@router.route_provider'] + calls: + - [fromRequestStack, ['@request_stack']] + tags: + - { name: needs_destruction } unrouted_url_assembler: class: Drupal\Core\Utility\UnroutedUrlAssembler arguments: ['@request_stack', '@config.factory' ] diff --git a/core/lib/Drupal/Core/Routing/CachedUrlGenerator.php b/core/lib/Drupal/Core/Routing/CachedUrlGenerator.php index 4fa722a7..cd8421c 100644 --- a/core/lib/Drupal/Core/Routing/CachedUrlGenerator.php +++ b/core/lib/Drupal/Core/Routing/CachedUrlGenerator.php @@ -12,7 +12,7 @@ use Drupal\Core\Language\Language; use Drupal\Core\Language\LanguageManagerInterface; use Symfony\Cmf\Component\Routing\RouteProviderInterface as SymfonyRouteProviderInterface; -use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Routing\Exception\RouteNotFoundException; use Symfony\Component\Routing\RequestContext as SymfonyRequestContext; use Symfony\Component\Routing\Route as SymfonyRoute; @@ -191,8 +191,11 @@ protected function getRoute($name) { /** * {@inheritdoc} */ - public function setRequest(Request $request) { - $this->cacheKey = $request->attributes->get('_system_path'); + public function fromRequestStack(RequestStack $requestStack) { + $this->cacheKey = $requestStack->getCurrentRequest()->attributes->get('_system_path'); + if (!RequestHelper::isCleanUrl($requestStack->getCurrentRequest())){ + $this->cacheKey .= '::' . $requestStack->getCurrentRequest()->getScriptName(); + } // Only multilingual sites have language dependant URLs. if ($this->languageManager->isMultilingual()) { $this->cacheKey .= '::' . $this->languageManager->getCurrentLanguage(Language::TYPE_URL)->id; diff --git a/core/modules/language/src/Tests/LanguageListTest.php b/core/modules/language/src/Tests/LanguageListTest.php index 8cdefd0..1b7f263 100644 --- a/core/modules/language/src/Tests/LanguageListTest.php +++ b/core/modules/language/src/Tests/LanguageListTest.php @@ -162,6 +162,8 @@ function testLanguageList() { 'site_default_language' => $langcode, ); $this->drupalPostForm(NULL, $edit, t('Save configuration')); + // Clear cached urls in the local process too. + $this->container->get('url_generator')->clearCache(); $this->rebuildContainer(); $this->assertNoOptionSelected('edit-site-default-language', 'en', 'Default language updated.'); $this->assertUrl(\Drupal::url('system.regional_settings', [], ['absolute' => TRUE, 'language' => $language]));