|
2 | 2 |
|
3 | 3 | namespace PHPFastCGI\FastCGIDaemon\Http; |
4 | 4 |
|
| 5 | +use Nyholm\Psr7Server\ServerRequestCreatorInterface; |
5 | 6 | use Symfony\Component\HttpFoundation\Request as HttpFoundationRequest; |
6 | | -use function Zend\Diactoros\createUploadedFile; |
7 | | -use Zend\Diactoros\ServerRequest; |
8 | | -use Zend\Diactoros\ServerRequestFactory; |
9 | 7 |
|
10 | 8 | /** |
11 | 9 | * The default implementation of the RequestInterface. |
12 | 10 | */ |
13 | 11 | final class Request implements RequestInterface |
14 | 12 | { |
| 13 | + /** |
| 14 | + * @var ServerRequestCreatorInterface|null |
| 15 | + */ |
| 16 | + private static $serverRequestCreator = null; |
| 17 | + |
15 | 18 | /** |
16 | 19 | * @var int |
17 | 20 | */ |
@@ -56,6 +59,11 @@ public function __construct(array $params, $stdin) |
56 | 59 | rewind($this->stdin); |
57 | 60 | } |
58 | 61 |
|
| 62 | + public static function setServerRequestCreator(ServerRequestCreatorInterface $serverRequestCreator): void |
| 63 | + { |
| 64 | + self::$serverRequestCreator = $serverRequestCreator; |
| 65 | + } |
| 66 | + |
59 | 67 | /** |
60 | 68 | * {@inheritdoc} |
61 | 69 | */ |
@@ -229,28 +237,26 @@ public function getStdin() |
229 | 237 | */ |
230 | 238 | public function getServerRequest() |
231 | 239 | { |
232 | | - if (!class_exists(ServerRequest::class)) { |
233 | | - throw new \RuntimeException('You need to install zendframework/zend-diactoros^1.8 to use PSR-7 requests.'); |
| 240 | + if (null === self::$serverRequestCreator) { |
| 241 | + throw new \RuntimeException('You need to add an object of \Nyholm\Psr7Server\ServerRequestCreatorInterface to \PHPFastCGI\FastCGIDaemon\Http\Request::setServerRequestCreator to use PSR-7 requests. Please install and read more at https://github.com/nyholm/psr7-server'); |
234 | 242 | } |
235 | 243 |
|
| 244 | + $server = $this->params; |
236 | 245 | $query = $this->getQuery(); |
237 | 246 | $post = $this->getPost(); |
238 | 247 | $cookies = $this->getCookies(); |
239 | 248 |
|
240 | | - $server = ServerRequestFactory::normalizeServer($this->params); |
241 | | - $headers = ServerRequestFactory::marshalHeaders($server); |
242 | | - $uri = ServerRequestFactory::marshalUriFromServer($server, $headers); |
243 | | - $method = ServerRequestFactory::get('REQUEST_METHOD', $server, 'GET'); |
244 | | - |
245 | | - $files = $this->uploadedFiles; |
246 | | - $this->preparePsr7UploadedFiles($files); |
| 249 | + return self::$serverRequestCreator->fromArrays( |
| 250 | + $server, |
| 251 | + self::$serverRequestCreator->getHeadersFromServer($server), |
| 252 | + $cookies, |
| 253 | + $query, |
| 254 | + $post, |
| 255 | + $this->uploadedFiles, |
| 256 | + $this->stdin |
| 257 | + ); |
247 | 258 |
|
248 | | - $request = new ServerRequest($server, $files, $uri, $method, $this->stdin, $headers); |
249 | 259 |
|
250 | | - return $request |
251 | | - ->withCookieParams($cookies) |
252 | | - ->withQueryParams($query) |
253 | | - ->withParsedBody($post); |
254 | 260 | } |
255 | 261 |
|
256 | 262 | /** |
@@ -303,15 +309,4 @@ private function addFile(array &$files, string $fieldName, string $filename, str |
303 | 309 | } |
304 | 310 | } |
305 | 311 | } |
306 | | - |
307 | | - private function preparePsr7UploadedFiles(array &$files) |
308 | | - { |
309 | | - if (isset($files['tmp_name'])) { |
310 | | - $files = createUploadedFile($files); |
311 | | - } else { |
312 | | - foreach ($files as &$file) { |
313 | | - $this->preparePsr7UploadedFiles($file); |
314 | | - } |
315 | | - } |
316 | | - } |
317 | 312 | } |
0 commit comments