From cb0e7c40cb3d4e18bf52bc644297857ebd3684d1 Mon Sep 17 00:00:00 2001
From: Roman <ps.not.use@gmail.com>
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 <ps.not.use@gmail.com>
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);