From cb0e7c40cb3d4e18bf52bc644297857ebd3684d1 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 7 Aug 2023 15:21:48 +0300 Subject: [PATCH 1/2] [Swoole] Prepare request uri with query string --- src/swoole/src/SymfonyHttpBridge.php | 18 ++++++++++++++++++ .../tests/Unit/SymfonyHttpBridgeTest.php | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/swoole/src/SymfonyHttpBridge.php b/src/swoole/src/SymfonyHttpBridge.php index ca26c2e..584a0de 100644 --- a/src/swoole/src/SymfonyHttpBridge.php +++ b/src/swoole/src/SymfonyHttpBridge.php @@ -32,6 +32,8 @@ public static function convertSwooleRequest(Request $request): SymfonyRequest ); $sfRequest->headers = new HeaderBag($request->header ?? []); + self::prepareRequestUriWithQueryString($sfRequest); + return $sfRequest; } @@ -62,4 +64,20 @@ public static function reflectSymfonyResponse(SymfonyResponse $sfResponse, Respo $response->end($sfResponse->getContent()); } } + + /** + * REQUEST_URI returns the uri path only, should append with the query string if exists. + */ + private static function prepareRequestUriWithQueryString(SymfonyRequest $sfRequest): void + { + if (!str_contains($sfRequest->server->get('REQUEST_URI', ''), '?') + && $sfRequest->server->has('QUERY_STRING') + && strlen($sfRequest->server->get('QUERY_STRING')) > 0 + ) { + $sfRequest->server->set( + 'REQUEST_URI', + $sfRequest->server->get('REQUEST_URI') .'?'. $sfRequest->server->get('QUERY_STRING') + ); + } + } } diff --git a/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php b/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php index b2ef8da..a00c02d 100644 --- a/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php +++ b/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php @@ -148,4 +148,20 @@ public function testStreamedResponseWillRespondWithOneChunkAtATime(): void SymfonyHttpBridge::reflectSymfonyResponse($sfResponse, $response); } + + public function testThatSwooleRequestedWithQuery(): void + { + $request = $this->createMock(Request::class); + $request->server = [ + 'REQUEST_METHOD' => 'POST', + 'REQUEST_URI' => '/dummy', + 'QUERY_STRING' => 'test=1' + ]; + + $sfRequest = SymfonyHttpBridge::convertSwooleRequest($request); + + $this->assertSame('test=1', $sfRequest->server->get('QUERY_STRING')); + $this->assertSame('/dummy?test=1', $sfRequest->server->get('REQUEST_URI')); + $this->assertSame('/dummy?test=1', $sfRequest->getRequestUri()); + } } From e614d7b7e34ef4982bf7f82575b54434aef23e3d Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 7 Aug 2023 15:46:50 +0300 Subject: [PATCH 2/2] php-cs --- src/swoole/src/SymfonyHttpBridge.php | 2 +- src/swoole/tests/Unit/SymfonyHttpBridgeTest.php | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/swoole/src/SymfonyHttpBridge.php b/src/swoole/src/SymfonyHttpBridge.php index 584a0de..ecc3c3b 100644 --- a/src/swoole/src/SymfonyHttpBridge.php +++ b/src/swoole/src/SymfonyHttpBridge.php @@ -76,7 +76,7 @@ private static function prepareRequestUriWithQueryString(SymfonyRequest $sfReque ) { $sfRequest->server->set( 'REQUEST_URI', - $sfRequest->server->get('REQUEST_URI') .'?'. $sfRequest->server->get('QUERY_STRING') + sprintf('%s?%s', $sfRequest->server->get('REQUEST_URI'), $sfRequest->server->get('QUERY_STRING')), ); } } diff --git a/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php b/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php index a00c02d..5e1ba31 100644 --- a/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php +++ b/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php @@ -153,9 +153,8 @@ public function testThatSwooleRequestedWithQuery(): void { $request = $this->createMock(Request::class); $request->server = [ - 'REQUEST_METHOD' => 'POST', 'REQUEST_URI' => '/dummy', - 'QUERY_STRING' => 'test=1' + 'QUERY_STRING' => 'test=1', ]; $sfRequest = SymfonyHttpBridge::convertSwooleRequest($request);