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 88use Riverline \MultiPartParser \StreamedPart ;
99
1010use function array_key_exists ;
11+ use function array_merge ;
1112use function assert ;
1213use function explode ;
1314use function is_array ;
1920use function Safe \preg_match ;
2021use function Safe \rewind ;
2122use function str_contains ;
23+ use function str_ends_with ;
24+ use function str_replace ;
2225use function strpos ;
2326use function strtolower ;
2427use function substr ;
@@ -157,7 +160,18 @@ private function parseEncodedParams(string $encodedParams): array
157160 $ value = '' ;
158161 }
159162
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 ;
161175 }
162176
163177 return $ params ;
Original file line number Diff line number Diff line change @@ -32,6 +32,26 @@ public function testBuildsRequestWithoutBody(): void
3232 self ::assertSame (['foo ' => 'bar ' ], $ request ->getJson ());
3333 }
3434
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+
3555 public function testBuildsRequestWithJsonInBody (): void
3656 {
3757 $ options = [
You can’t perform that action at this time.
0 commit comments