Skip to content

Commit

Permalink
Add support for streamed Symfony request
Browse files Browse the repository at this point in the history
  • Loading branch information
Ekman authored and nicolas-grekas committed Nov 25, 2019
1 parent 81ae86d commit df26630
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 27 deletions.
4 changes: 0 additions & 4 deletions Factory/DiactorosFactory.php
Expand Up @@ -84,8 +84,6 @@ public function createRequest(Request $symfonyRequest)
/**
* Converts Symfony uploaded files array to the PSR one.
*
* @param array $uploadedFiles
*
* @return array
*/
private function getFiles(array $uploadedFiles)
Expand All @@ -110,8 +108,6 @@ private function getFiles(array $uploadedFiles)
/**
* Creates a PSR-7 UploadedFile instance from a Symfony one.
*
* @param UploadedFile $symfonyUploadedFile
*
* @return UploadedFileInterface
*/
private function createUploadedFile(UploadedFile $symfonyUploadedFile)
Expand Down
12 changes: 3 additions & 9 deletions Factory/HttpFoundationFactory.php
Expand Up @@ -43,7 +43,7 @@ public function __construct(int $responseBufferMaxLength = 16372)
/**
* {@inheritdoc}
*/
public function createRequest(ServerRequestInterface $psrRequest)
public function createRequest(ServerRequestInterface $psrRequest, bool $streamed = false)
{
$server = [];
$uri = $psrRequest->getUri();
Expand All @@ -69,7 +69,7 @@ public function createRequest(ServerRequestInterface $psrRequest)
$psrRequest->getCookieParams(),
$this->getFiles($psrRequest->getUploadedFiles()),
$server,
$psrRequest->getBody()->__toString()
$streamed ? $psrRequest->getBody()->detach() : $psrRequest->getBody()->__toString()
);
$request->headers->replace($psrRequest->getHeaders());

Expand All @@ -79,8 +79,6 @@ public function createRequest(ServerRequestInterface $psrRequest)
/**
* Converts to the input array to $_FILES structure.
*
* @param array $uploadedFiles
*
* @return array
*/
private function getFiles(array $uploadedFiles)
Expand All @@ -101,8 +99,6 @@ private function getFiles(array $uploadedFiles)
/**
* Creates Symfony UploadedFile instance from PSR-7 ones.
*
* @param UploadedFileInterface $psrUploadedFile
*
* @return UploadedFile
*/
private function createUploadedFile(UploadedFileInterface $psrUploadedFile)
Expand Down Expand Up @@ -183,13 +179,11 @@ public function createResponse(ResponseInterface $psrResponse, bool $streamed =
*
* Some snippets have been taken from the Guzzle project: https://github.com/guzzle/guzzle/blob/5.3/src/Cookie/SetCookie.php#L34
*
* @param string $cookie
*
* @return Cookie
*
* @throws \InvalidArgumentException
*/
private function createCookie($cookie)
private function createCookie(string $cookie)
{
foreach (explode(';', $cookie) as $part) {
$part = trim($part);
Expand Down
4 changes: 0 additions & 4 deletions Factory/PsrHttpFactory.php
Expand Up @@ -78,8 +78,6 @@ public function createRequest(Request $symfonyRequest)
/**
* Converts Symfony uploaded files array to the PSR one.
*
* @param array $uploadedFiles
*
* @return array
*/
private function getFiles(array $uploadedFiles)
Expand All @@ -104,8 +102,6 @@ private function getFiles(array $uploadedFiles)
/**
* Creates a PSR-7 UploadedFile instance from a Symfony one.
*
* @param UploadedFile $symfonyUploadedFile
*
* @return UploadedFileInterface
*/
private function createUploadedFile(UploadedFile $symfonyUploadedFile)
Expand Down
8 changes: 2 additions & 6 deletions HttpFoundationFactoryInterface.php
Expand Up @@ -26,18 +26,14 @@ interface HttpFoundationFactoryInterface
/**
* Creates a Symfony Request instance from a PSR-7 one.
*
* @param ServerRequestInterface $psrRequest
*
* @return Request
*/
public function createRequest(ServerRequestInterface $psrRequest);
public function createRequest(ServerRequestInterface $psrRequest, bool $streamed = false);

/**
* Creates a Symfony Response instance from a PSR-7 one.
*
* @param ResponseInterface $psrResponse
*
* @return Response
*/
public function createResponse(ResponseInterface $psrResponse);
public function createResponse(ResponseInterface $psrResponse, bool $streamed = false);
}
4 changes: 0 additions & 4 deletions HttpMessageFactoryInterface.php
Expand Up @@ -26,17 +26,13 @@ interface HttpMessageFactoryInterface
/**
* Creates a PSR-7 Request instance from a Symfony one.
*
* @param Request $symfonyRequest
*
* @return ServerRequestInterface
*/
public function createRequest(Request $symfonyRequest);

/**
* Creates a PSR-7 Response instance from a Symfony one.
*
* @param Response $symfonyResponse
*
* @return ResponseInterface
*/
public function createResponse(Response $symfonyResponse);
Expand Down
21 changes: 21 additions & 0 deletions Tests/Factory/HttpFoundationFactoryTest.php
Expand Up @@ -83,6 +83,27 @@ public function testCreateRequest()
$this->assertEquals(['a', 'b'], $symfonyRequest->headers->get('X-data', null, false));
}

public function testCreateRequestWithStreamedBody()
{
$serverRequest = new ServerRequest(
'1.1',
[],
new Stream('The body'),
'/',
'GET',
null,
[],
[],
[],
[],
null,
[]
);

$symfonyRequest = $this->factory->createRequest($serverRequest, true);
$this->assertEquals('The body', $symfonyRequest->getContent());
}

public function testCreateRequestWithNullParsedBody()
{
$serverRequest = new ServerRequest(
Expand Down
1 change: 1 addition & 0 deletions Tests/Fixtures/Stream.php
Expand Up @@ -37,6 +37,7 @@ public function close()

public function detach()
{
return fopen('data://text/plain,'.$this->stringContent, 'r');
}

public function getSize()
Expand Down

0 comments on commit df26630

Please sign in to comment.