Skip to content

Commit 9d37f4c

Browse files
authored
Merge pull request #202 from PowerKiKi/support-non-parsed-psr7
Support non pre-parsed PSR-7 request body
2 parents eaadae4 + 11c9429 commit 9d37f4c

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

src/Server/Helper.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,10 @@ public function parsePsrRequest(ServerRequestInterface $request)
499499
Utils::printSafeJson($bodyParams)
500500
);
501501
}
502+
503+
if (empty($bodyParams)) {
504+
$bodyParams = json_decode($request->getBody(), true);
505+
}
502506
} else {
503507
$bodyParams = $request->getParsedBody();
504508

tests/Server/StandardServerTest.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,17 @@ public function testSimplePsrRequestExecution()
4747
'query' => '{f1}'
4848
]);
4949

50-
$request = $this->preparePsrRequest('application/json', $body);
51-
5250
$expected = [
5351
'data' => [
5452
'f1' => 'f1'
5553
]
5654
];
5755

58-
$this->assertPsrRequestEquals($expected, $request);
56+
$preParsedRequest = $this->preparePsrRequest('application/json', $body, true);
57+
$this->assertPsrRequestEquals($expected, $preParsedRequest);
58+
59+
$notPreParsedRequest = $this->preparePsrRequest('application/json', $body, false);
60+
$this->assertPsrRequestEquals($expected, $notPreParsedRequest);
5961
}
6062

6163
private function executePsrRequest($psrRequest)
@@ -73,21 +75,20 @@ private function assertPsrRequestEquals($expected, $request)
7375
return $result;
7476
}
7577

76-
private function preparePsrRequest($contentType, $content, $method = 'POST')
78+
private function preparePsrRequest($contentType, $content, $preParseBody)
7779
{
7880
$psrRequestBody = new PsrStreamStub();
7981
$psrRequestBody->content = $content;
8082

8183
$psrRequest = new PsrRequestStub();
8284
$psrRequest->headers['content-type'] = [$contentType];
83-
$psrRequest->method = $method;
85+
$psrRequest->method = 'POST';
8486
$psrRequest->body = $psrRequestBody;
8587

86-
if ($contentType === 'application/json') {
88+
if ($preParseBody && $contentType === 'application/json') {
8789
$parsedBody = json_decode($content, true);
88-
$parsedBody = $parsedBody === false ? null : $parsedBody;
8990
} else {
90-
$parsedBody = null;
91+
$parsedBody = [];
9192
}
9293

9394
$psrRequest->parsedBody = $parsedBody;

0 commit comments

Comments
 (0)