Merge pull request #202 from PowerKiKi/support-non-parsed-psr7

Support non pre-parsed PSR-7 request body
This commit is contained in:
Vladimir Razuvaev 2017-11-28 12:01:15 +07:00 committed by GitHub
commit 9d37f4c0d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 8 deletions

View File

@ -499,6 +499,10 @@ class Helper
Utils::printSafeJson($bodyParams) Utils::printSafeJson($bodyParams)
); );
} }
if (empty($bodyParams)) {
$bodyParams = json_decode($request->getBody(), true);
}
} else { } else {
$bodyParams = $request->getParsedBody(); $bodyParams = $request->getParsedBody();

View File

@ -47,15 +47,17 @@ class StandardServerTest extends TestCase
'query' => '{f1}' 'query' => '{f1}'
]); ]);
$request = $this->preparePsrRequest('application/json', $body);
$expected = [ $expected = [
'data' => [ 'data' => [
'f1' => 'f1' 'f1' => 'f1'
] ]
]; ];
$this->assertPsrRequestEquals($expected, $request); $preParsedRequest = $this->preparePsrRequest('application/json', $body, true);
$this->assertPsrRequestEquals($expected, $preParsedRequest);
$notPreParsedRequest = $this->preparePsrRequest('application/json', $body, false);
$this->assertPsrRequestEquals($expected, $notPreParsedRequest);
} }
private function executePsrRequest($psrRequest) private function executePsrRequest($psrRequest)
@ -73,21 +75,20 @@ class StandardServerTest extends TestCase
return $result; return $result;
} }
private function preparePsrRequest($contentType, $content, $method = 'POST') private function preparePsrRequest($contentType, $content, $preParseBody)
{ {
$psrRequestBody = new PsrStreamStub(); $psrRequestBody = new PsrStreamStub();
$psrRequestBody->content = $content; $psrRequestBody->content = $content;
$psrRequest = new PsrRequestStub(); $psrRequest = new PsrRequestStub();
$psrRequest->headers['content-type'] = [$contentType]; $psrRequest->headers['content-type'] = [$contentType];
$psrRequest->method = $method; $psrRequest->method = 'POST';
$psrRequest->body = $psrRequestBody; $psrRequest->body = $psrRequestBody;
if ($contentType === 'application/json') { if ($preParseBody && $contentType === 'application/json') {
$parsedBody = json_decode($content, true); $parsedBody = json_decode($content, true);
$parsedBody = $parsedBody === false ? null : $parsedBody;
} else { } else {
$parsedBody = null; $parsedBody = [];
} }
$psrRequest->parsedBody = $parsedBody; $psrRequest->parsedBody = $parsedBody;