77use Psr \Http \Message \RequestFactoryInterface ;
88use Psr \Http \Message \RequestInterface ;
99use Psr \Http \Message \StreamFactoryInterface ;
10+ use Psr \Http \Message \UriFactoryInterface ;
11+ use Psr \Http \Message \UriInterface ;
1012
1113use function http_build_query ;
14+ use function is_string ;
1215
1316use const PHP_QUERY_RFC3986 ;
1417
@@ -17,6 +20,8 @@ final class RequestFactory
1720 public function __construct (
1821 private RequestFactoryInterface $ requestFactory ,
1922 private StreamFactoryInterface $ streamFactory ,
23+ private UriFactoryInterface |null $ uriFactory = null ,
24+ private UriInterface |string $ uri = '' ,
2025 ) {
2126 }
2227
@@ -29,7 +34,20 @@ public function prepareRequest(RequestOptions $requestOptions): RequestInterface
2934 PHP_QUERY_RFC3986 ,
3035 );
3136
32- return $ this ->requestFactory ->createRequest ('POST ' , $ query === '' ? '' : '? ' . $ query )
37+ if ($ this ->uriFactory === null ) {
38+ return $ this ->requestFactory ->createRequest ('POST ' , $ query === '' ? '' : '? ' . $ query )
39+ ->withBody ($ this ->streamFactory ->createStream ($ requestOptions ->sql ));
40+ }
41+
42+ $ uri = $ this ->uri ;
43+ if (is_string ($ uri )) {
44+ $ uri = $ this ->uriFactory ->createUri ($ uri );
45+ }
46+
47+ $ uriQuery = $ uri ->getQuery ();
48+ $ uri = $ uri ->withQuery ($ uriQuery . ($ uriQuery !== '' && $ query !== '' ? '& ' : '' ) . $ query );
49+
50+ return $ this ->requestFactory ->createRequest ('POST ' , $ uri )
3351 ->withBody ($ this ->streamFactory ->createStream ($ requestOptions ->sql ));
3452 }
3553}
0 commit comments