File tree Expand file tree Collapse file tree 2 files changed +35
-1
lines changed Expand file tree Collapse file tree 2 files changed +35
-1
lines changed Original file line number Diff line number Diff line change 8
8
use Riverline \MultiPartParser \StreamedPart ;
9
9
10
10
use function array_key_exists ;
11
+ use function array_merge ;
11
12
use function assert ;
12
13
use function explode ;
13
14
use function is_array ;
19
20
use function Safe \preg_match ;
20
21
use function Safe \rewind ;
21
22
use function str_contains ;
23
+ use function str_ends_with ;
24
+ use function str_replace ;
22
25
use function strpos ;
23
26
use function strtolower ;
24
27
use function substr ;
@@ -157,7 +160,18 @@ private function parseEncodedParams(string $encodedParams): array
157
160
$ value = '' ;
158
161
}
159
162
160
- $ params [urldecode ((string ) $ key )] = urldecode ((string ) $ value );
163
+ $ key = urldecode ($ key );
164
+ $ value = urldecode ($ value );
165
+
166
+ if (str_ends_with ($ key , '[] ' )) {
167
+ $ key = str_replace ('[] ' , '' , $ key );
168
+ $ value = array_merge (
169
+ $ params [$ key ] ?? [],
170
+ [$ value ],
171
+ );
172
+ }
173
+
174
+ $ params [$ key ] = $ value ;
161
175
}
162
176
163
177
return $ params ;
Original file line number Diff line number Diff line change @@ -32,6 +32,26 @@ public function testBuildsRequestWithoutBody(): void
32
32
self ::assertSame (['foo ' => 'bar ' ], $ request ->getJson ());
33
33
}
34
34
35
+ public function testBuildsRequestWithMultipleQueryParams (): void
36
+ {
37
+ $ options = ['query_params ' => ['name ' => ['abc ' , 'def ' ]]];
38
+ $ request = ($ this ->realRequestFactory )('POST ' , 'https://service.com ' , $ options );
39
+
40
+ self ::assertSame ('POST ' , $ request ->getMethod ());
41
+ self ::assertSame ('https://service.com ' , $ request ->getUri ());
42
+ self ::assertSame (['name ' => ['abc ' , 'def ' ]], $ request ->getQueryParams ());
43
+ }
44
+
45
+ public function testBuildsRequestWithMultipleQueryParamsInUri (): void
46
+ {
47
+ $ options = [];
48
+ $ request = ($ this ->realRequestFactory )('POST ' , 'https://service.com?name[]=abc&name[]=def ' , $ options );
49
+
50
+ self ::assertSame ('POST ' , $ request ->getMethod ());
51
+ self ::assertSame ('https://service.com ' , $ request ->getUri ());
52
+ self ::assertSame (['name ' => ['abc ' , 'def ' ]], $ request ->getQueryParams ());
53
+ }
54
+
35
55
public function testBuildsRequestWithJsonInBody (): void
36
56
{
37
57
$ options = [
You can’t perform that action at this time.
0 commit comments