From f21994c2a8d593df484f0c6be346c233c62f9499 Mon Sep 17 00:00:00 2001 From: Alexander Schranz Date: Wed, 2 Apr 2025 14:07:22 +0200 Subject: [PATCH 1/6] Add possibility to create a request context with parameters directly --- src/Symfony/Component/Routing/RequestContext.php | 3 ++- src/Symfony/Component/Routing/Tests/RequestContextTest.php | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Routing/RequestContext.php b/src/Symfony/Component/Routing/RequestContext.php index 5e9e79d916802..a6af29f7e852d 100644 --- a/src/Symfony/Component/Routing/RequestContext.php +++ b/src/Symfony/Component/Routing/RequestContext.php @@ -33,7 +33,7 @@ class RequestContext private string $queryString; private array $parameters = []; - public function __construct(string $baseUrl = '', string $method = 'GET', string $host = 'localhost', string $scheme = 'http', int $httpPort = 80, int $httpsPort = 443, string $path = '/', string $queryString = '') + public function __construct(string $baseUrl = '', string $method = 'GET', string $host = 'localhost', string $scheme = 'http', int $httpPort = 80, int $httpsPort = 443, string $path = '/', string $queryString = '', array $parameters = []) { $this->setBaseUrl($baseUrl); $this->setMethod($method); @@ -43,6 +43,7 @@ public function __construct(string $baseUrl = '', string $method = 'GET', string $this->setHttpsPort($httpsPort); $this->setPathInfo($path); $this->setQueryString($queryString); + $this->setParameters($parameters); } public static function fromUri(string $uri, string $host = 'localhost', string $scheme = 'http', int $httpPort = 80, int $httpsPort = 443): self diff --git a/src/Symfony/Component/Routing/Tests/RequestContextTest.php b/src/Symfony/Component/Routing/Tests/RequestContextTest.php index fcc42ff593a96..08944e00bd236 100644 --- a/src/Symfony/Component/Routing/Tests/RequestContextTest.php +++ b/src/Symfony/Component/Routing/Tests/RequestContextTest.php @@ -27,7 +27,10 @@ public function testConstruct() 8080, 444, '/baz', - 'bar=foobar' + 'bar=foobar', + [ + 'foo' => 'bar', + ] ); $this->assertEquals('foo', $requestContext->getBaseUrl()); @@ -38,6 +41,7 @@ public function testConstruct() $this->assertSame(444, $requestContext->getHttpsPort()); $this->assertEquals('/baz', $requestContext->getPathInfo()); $this->assertEquals('bar=foobar', $requestContext->getQueryString()); + $this->assertEquals(['foo' => 'bar'], $requestContext->getParameters()); } public function testFromUriWithBaseUrl() From 6655b1bc60f128c103c7227fd68e1796233dffd0 Mon Sep 17 00:00:00 2001 From: Alexander Schranz Date: Wed, 2 Apr 2025 14:11:53 +0200 Subject: [PATCH 2/6] Keep BC in mind --- src/Symfony/Component/Routing/RequestContext.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Routing/RequestContext.php b/src/Symfony/Component/Routing/RequestContext.php index a6af29f7e852d..7537e35d19d5c 100644 --- a/src/Symfony/Component/Routing/RequestContext.php +++ b/src/Symfony/Component/Routing/RequestContext.php @@ -43,7 +43,7 @@ public function __construct(string $baseUrl = '', string $method = 'GET', string $this->setHttpsPort($httpsPort); $this->setPathInfo($path); $this->setQueryString($queryString); - $this->setParameters($parameters); + $this->setParameters([...$this->parameters, ...$parameters]); } public static function fromUri(string $uri, string $host = 'localhost', string $scheme = 'http', int $httpPort = 80, int $httpsPort = 443): self From c7a98f33f2068e382aae9692e3e0e50e8d406a09 Mon Sep 17 00:00:00 2001 From: Alexander Schranz Date: Wed, 2 Apr 2025 14:35:41 +0200 Subject: [PATCH 3/6] Add test about construct setParameters bc layer --- .../Component/Routing/Tests/RequestContextTest.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Symfony/Component/Routing/Tests/RequestContextTest.php b/src/Symfony/Component/Routing/Tests/RequestContextTest.php index 08944e00bd236..0f92c9af5d687 100644 --- a/src/Symfony/Component/Routing/Tests/RequestContextTest.php +++ b/src/Symfony/Component/Routing/Tests/RequestContextTest.php @@ -44,6 +44,19 @@ public function testConstruct() $this->assertEquals(['foo' => 'bar'], $requestContext->getParameters()); } + public function testConstructParametersBcLayer() + { + $requestContext = new class() extends RequestContext { + public function __construct() + { + $this->setParameters(['foo' => 'bar']); + parent::__construct(); + } + }; + + $this->assertEquals(['foo' => 'bar'], $requestContext->getParameters()); + } + public function testFromUriWithBaseUrl() { $requestContext = RequestContext::fromUri('https://test.com:444/index.php'); From 63e6c4d2de239ee83cc9b7fca4d447076771ed5d Mon Sep 17 00:00:00 2001 From: Alexander Schranz Date: Wed, 2 Apr 2025 14:48:19 +0200 Subject: [PATCH 4/6] Add deprecation for bc layer --- src/Symfony/Component/Routing/RequestContext.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Routing/RequestContext.php b/src/Symfony/Component/Routing/RequestContext.php index 7537e35d19d5c..e440d888ac267 100644 --- a/src/Symfony/Component/Routing/RequestContext.php +++ b/src/Symfony/Component/Routing/RequestContext.php @@ -43,7 +43,12 @@ public function __construct(string $baseUrl = '', string $method = 'GET', string $this->setHttpsPort($httpsPort); $this->setPathInfo($path); $this->setQueryString($queryString); - $this->setParameters([...$this->parameters, ...$parameters]); + + if (count($parameters) > 0) { + $this->setParameters($parameters); + } elseif (count($this->parameters) > 0) { + trigger_deprecation('symfony/routing', '7.3', 'Set parameters directly via the own constructor argument'); + } } public static function fromUri(string $uri, string $host = 'localhost', string $scheme = 'http', int $httpPort = 80, int $httpsPort = 443): self From 89de5cc7eb98d1ffdc07e6edf22405b80cb752ac Mon Sep 17 00:00:00 2001 From: Alexander Schranz Date: Wed, 30 Apr 2025 09:36:17 +0200 Subject: [PATCH 5/6] Update src/Symfony/Component/Routing/RequestContext.php Co-authored-by: Nicolas Grekas --- src/Symfony/Component/Routing/RequestContext.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Routing/RequestContext.php b/src/Symfony/Component/Routing/RequestContext.php index e440d888ac267..105ff86020cfa 100644 --- a/src/Symfony/Component/Routing/RequestContext.php +++ b/src/Symfony/Component/Routing/RequestContext.php @@ -44,10 +44,9 @@ public function __construct(string $baseUrl = '', string $method = 'GET', string $this->setPathInfo($path); $this->setQueryString($queryString); - if (count($parameters) > 0) { - $this->setParameters($parameters); - } elseif (count($this->parameters) > 0) { - trigger_deprecation('symfony/routing', '7.3', 'Set parameters directly via the own constructor argument'); + if ($parameters) { + $this->parameters = $parameters; + } } } From 32a29d8ce2145865371c4fb646fd00e2aa71f312 Mon Sep 17 00:00:00 2001 From: Alexander Schranz Date: Wed, 30 Apr 2025 09:44:57 +0200 Subject: [PATCH 6/6] Update RequestContext.php --- src/Symfony/Component/Routing/RequestContext.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Symfony/Component/Routing/RequestContext.php b/src/Symfony/Component/Routing/RequestContext.php index 105ff86020cfa..cf7fd0985d8a9 100644 --- a/src/Symfony/Component/Routing/RequestContext.php +++ b/src/Symfony/Component/Routing/RequestContext.php @@ -47,7 +47,6 @@ public function __construct(string $baseUrl = '', string $method = 'GET', string if ($parameters) { $this->parameters = $parameters; } - } } public static function fromUri(string $uri, string $host = 'localhost', string $scheme = 'http', int $httpPort = 80, int $httpsPort = 443): self