From 516d5dea7c0797092cf4c11e3168b4b71f2c494a Mon Sep 17 00:00:00 2001 From: Derek Stephen McLean Date: Mon, 15 Jul 2019 00:59:02 +0200 Subject: [PATCH 1/4] Add routing params to request query params for middleware usage --- src/Dispatcher.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Dispatcher.php b/src/Dispatcher.php index 89ef12f..d821534 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -42,12 +42,27 @@ public function dispatchRequest(ServerRequestInterface $request): ResponseInterf case FastRoute::FOUND: $route = $this->ensureHandlerIsRoute($match[1], $httpMethod, $uri)->setVars($match[2]); $this->setFoundMiddleware($route); + $request = $this->requestWithRouteVars($request, $route); break; } return $this->handle($request); } + /** + * @param ServerRequestInterface $request + * @param Route $route + * @return ServerRequestInterface + */ + private function requestWithRouteVars(ServerRequestInterface $request, Route $route): ServerRequestInterface + { + $queryParams = $request->getQueryParams(); + $routerParams = $route->getVars(); + $params = array_merge($queryParams, $routerParams); + + return $request->withQueryParams($params); + } + /** * Ensure handler is a Route, honoring the contract of dispatchRequest. * From 3f8c050dcc16ece448b136ef3717108b39249c25 Mon Sep 17 00:00:00 2001 From: Derek Stephen McLean Date: Tue, 23 Jul 2019 13:12:06 +0100 Subject: [PATCH 2/4] default to an empty array if no params returned --- src/Dispatcher.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Dispatcher.php b/src/Dispatcher.php index d821534..b1e33dc 100644 --- a/src/Dispatcher.php +++ b/src/Dispatcher.php @@ -56,8 +56,8 @@ public function dispatchRequest(ServerRequestInterface $request): ResponseInterf */ private function requestWithRouteVars(ServerRequestInterface $request, Route $route): ServerRequestInterface { - $queryParams = $request->getQueryParams(); - $routerParams = $route->getVars(); + $queryParams = $request->getQueryParams() ?: []; + $routerParams = $route->getVars() ?: []; $params = array_merge($queryParams, $routerParams); return $request->withQueryParams($params); From 2406336273371e00bd279248b4b96e0dc2d910d7 Mon Sep 17 00:00:00 2001 From: Derek Stephen McLean Date: Tue, 23 Jul 2019 13:57:27 +0100 Subject: [PATCH 3/4] add return values for request mock withQueryParams --- tests/DispatchIntegrationTest.php | 49 +++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/DispatchIntegrationTest.php b/tests/DispatchIntegrationTest.php index ea36489..14a31ab 100644 --- a/tests/DispatchIntegrationTest.php +++ b/tests/DispatchIntegrationTest.php @@ -37,6 +37,12 @@ public function testDispatchesFoundRoute(): void ->willReturn('GET') ; + $request + ->expects($this->once()) + ->method('withQueryParams') + ->willReturn($request) + ; + $request ->expects($this->exactly(2)) ->method('getUri') @@ -93,6 +99,12 @@ public function testDispatchesExceptionRoute(): void ->willReturn('GET') ; + $request + ->expects($this->once()) + ->method('withQueryParams') + ->willReturn($request) + ; + $request ->expects($this->exactly(2)) ->method('getUri') @@ -132,6 +144,12 @@ public function testDispatchesExceptionWithJsonStrategyRoute(): void ->willReturn($uri) ; + $request + ->expects($this->once()) + ->method('withQueryParams') + ->willReturn($request) + ; + $body ->expects($this->once()) ->method('write') @@ -212,6 +230,12 @@ public function testDispatchesHttpExceptionWithJsonStrategyRoute(): void ->willReturn($uri) ; + $request + ->expects($this->once()) + ->method('withQueryParams') + ->willReturn($request) + ; + $body ->expects($this->once()) ->method('isWritable') @@ -718,6 +742,12 @@ public function testRouteStrategyOverridesGlobalStrategy(): void ->willReturn($this->createMock(StreamInterface::class)) ; + $request + ->expects($this->once()) + ->method('withQueryParams') + ->willReturn($request) + ; + $uri ->expects($this->exactly(2)) ->method('getPath') @@ -765,6 +795,12 @@ public function testRouteStrategyOverridesGroupStrategy(): void ->willReturn($uri) ; + $request + ->expects($this->once()) + ->method('withQueryParams') + ->willReturn($request) + ; + $response ->expects($this->once()) ->method('getBody') @@ -939,6 +975,13 @@ public function process( ->with($this->equalTo('middleware4')) ; + $request + ->expects($this->any()) + ->method('withQueryParams') + ->willReturn($request) + ; + + $uri ->expects($this->exactly(2)) ->method('getPath') @@ -988,6 +1031,12 @@ public function testDispatchDoesNotThrowWhenUsingAddRoute(): void ->willReturn($uri) ; + $request + ->expects($this->once()) + ->method('withQueryParams') + ->willReturn($request) + ; + $router = new Router; $router->addRoute(['GET', 'POST'], '/example/{something}', function ( From 84aa88917a43d37d4ee899c9bf5e2641a3f4ceea Mon Sep 17 00:00:00 2001 From: Derek Stephen McLean Date: Tue, 23 Jul 2019 14:31:39 +0100 Subject: [PATCH 4/4] Fix invocation index numbers now two more methods are called --- tests/DispatchIntegrationTest.php | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tests/DispatchIntegrationTest.php b/tests/DispatchIntegrationTest.php index 14a31ab..ec8ec85 100644 --- a/tests/DispatchIntegrationTest.php +++ b/tests/DispatchIntegrationTest.php @@ -947,40 +947,45 @@ public function process( $request ->expects($this->at(3)) - ->method('withRequestTarget') - ->with($this->equalTo('middleware1')) + ->method('getQueryParams') + ->willReturn([]) ; $request ->expects($this->at(4)) - ->method('withRequestTarget') - ->with($this->equalTo('middleware4')) + ->method('withQueryParams') + ->willReturn($request) ; $request ->expects($this->at(5)) ->method('withRequestTarget') - ->with($this->equalTo('middleware2')) + ->with($this->equalTo('middleware1')) ; $request ->expects($this->at(6)) ->method('withRequestTarget') - ->with($this->equalTo('middleware3')) + ->with($this->equalTo('middleware4')) ; $request ->expects($this->at(7)) ->method('withRequestTarget') - ->with($this->equalTo('middleware4')) + ->with($this->equalTo('middleware2')) ; $request - ->expects($this->any()) - ->method('withQueryParams') - ->willReturn($request) + ->expects($this->at(8)) + ->method('withRequestTarget') + ->with($this->equalTo('middleware3')) ; + $request + ->expects($this->at(9)) + ->method('withRequestTarget') + ->with($this->equalTo('middleware4')) + ; $uri ->expects($this->exactly(2))