diff --git a/src/swoole/src/SymfonyHttpBridge.php b/src/swoole/src/SymfonyHttpBridge.php index ca26c2e..ecc3c3b 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', + 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 b2ef8da..5e1ba31 100644 --- a/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php +++ b/src/swoole/tests/Unit/SymfonyHttpBridgeTest.php @@ -148,4 +148,19 @@ public function testStreamedResponseWillRespondWithOneChunkAtATime(): void SymfonyHttpBridge::reflectSymfonyResponse($sfResponse, $response); } + + public function testThatSwooleRequestedWithQuery(): void + { + $request = $this->createMock(Request::class); + $request->server = [ + '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()); + } }