From ca0a26d23bb0e23d37c602cfd66e8873b91cfb7e Mon Sep 17 00:00:00 2001 From: Lee Rowlands Date: Wed, 5 Apr 2023 11:08:26 +1000 Subject: [PATCH] Issue #3277784 by Tim Bozeman, mrinalini9, larowlan: copyRawVariables should support default route parameters --- .../Core/Routing/Enhancer/ParamConversionEnhancer.php | 7 +++++++ .../Tests/Core/Enhancer/ParamConversionEnhancerTest.php | 6 +++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php b/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php index 8998c82f5b1..2ec558a36e0 100644 --- a/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php +++ b/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php @@ -67,6 +67,13 @@ class ParamConversionEnhancer implements EnhancerInterface, EventSubscriberInter foreach (array_intersect_key($defaults, $variables) as $key => $value) { $raw_variables[$key] = $value; } + // Route defaults that do not start with a leading "_" are also + // parameters, even if they are not included in path or host patterns. + foreach ($route->getDefaults() as $name => $value) { + if (!isset($raw_variables[$name]) && substr($name, 0, 1) !== '_') { + $raw_variables[$name] = $value; + } + } return new InputBag($raw_variables); } diff --git a/core/tests/Drupal/Tests/Core/Enhancer/ParamConversionEnhancerTest.php b/core/tests/Drupal/Tests/Core/Enhancer/ParamConversionEnhancerTest.php index ce67c40e62b..ec9224eb3f4 100644 --- a/core/tests/Drupal/Tests/Core/Enhancer/ParamConversionEnhancerTest.php +++ b/core/tests/Drupal/Tests/Core/Enhancer/ParamConversionEnhancerTest.php @@ -75,6 +75,7 @@ class ParamConversionEnhancerTest extends UnitTestCase { */ public function testCopyRawVariables() { $route = new Route('/test/{id}'); + $route->setDefault('node_type', 'page'); $defaults = [ RouteObjectInterface::ROUTE_OBJECT => $route, 'id' => '1', @@ -90,7 +91,10 @@ class ParamConversionEnhancerTest extends UnitTestCase { return $defaults; }); - $expected = new InputBag(['id' => 1]); + $expected = new InputBag([ + 'id' => '1', + 'node_type' => 'page', + ]); $result = $this->paramConversionEnhancer->enhance($defaults, new Request()); $this->assertEquals($result['_raw_variables'], $expected); }