Issue #3277784 by Tim Bozeman, mrinalini9, larowlan: copyRawVariables should support default route parameters

merge-requests/3650/head^2
Lee Rowlands 2023-04-05 11:08:26 +10:00
parent 686537e11e
commit ca0a26d23b
No known key found for this signature in database
GPG Key ID: 2B829A3DF9204DC4
2 changed files with 12 additions and 1 deletions

View File

@ -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);
}

View File

@ -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);
}