diff --git a/src/Message/ServerRequest.php b/src/Message/ServerRequest.php index 91dce41..9240348 100644 --- a/src/Message/ServerRequest.php +++ b/src/Message/ServerRequest.php @@ -164,12 +164,6 @@ class ServerRequest extends Request implements ServerRequestInterface */ public function getParsedBody() { - if (!isset($this->parsedBody)) { - $contentType = $this->getHeader("Content-type"); - if ($contentType === "application/x-www-form-urlencoded" || $contentType === "multipart/form-data") { - $this->parsedBody = $_POST; - } - } return $this->parsedBody; } @@ -326,6 +320,10 @@ class ServerRequest extends Request implements ServerRequestInterface return self::$serverRequest; } + /** + * Set the members of the passed request based on the request sent to the server. + * @param self $request + */ private function updateWithServerRequest(&$request) { $request->serverParams = $_SERVER; @@ -339,6 +337,10 @@ class ServerRequest extends Request implements ServerRequestInterface foreach ($headers as $key => $value) { $request->headers[$key] = $value; } + $contentType = $request->getHeader("Content-type"); + if ($contentType === "application/x-www-form-urlencoded" || $contentType === "multipart/form-data") { + $request->parsedBody = $_POST; + } } /** diff --git a/test/tests/unit/Message/ServerRequestTest.php b/test/tests/unit/Message/ServerRequestTest.php index 325b6b3..035fe3c 100644 --- a/test/tests/unit/Message/ServerRequestTest.php +++ b/test/tests/unit/Message/ServerRequestTest.php @@ -47,9 +47,6 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase "size" => 98174 ] ]; - $_POST = [ - "dog" => "Bear" - ]; $request = ServerRequest::getServerRequest(); $this->assertNotNull($request); } @@ -84,9 +81,6 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase "size" => 98174 ] ]; - $_POST = [ - "dog" => "Bear" - ]; $request = new ServerRequest(); $request = $request->withServerRequest(); $this->assertNotNull($request); @@ -191,63 +185,70 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase /** * @covers WellRESTed\Message\ServerRequest::getParsedBody + * @covers WellRESTed\Message\ServerRequest::updateWithServerRequest + * @uses WellRESTed\Message\ServerRequest::__construct * @uses WellRESTed\Message\ServerRequest::__clone + * @uses WellRESTed\Message\ServerRequest::withServerRequest + * @uses WellRESTed\Message\ServerRequest::updateWithServerRequest + * @uses WellRESTed\Message\ServerRequest::getServerRequestHeaders * @uses WellRESTed\Message\Request * @uses WellRESTed\Message\Message * @uses WellRESTed\Message\HeaderCollection * @preserveGlobalState disabled - * @depends testWithServerRequestReadsFromRequest + * @dataProvider formContentTypeProvider */ - public function testGetParsedBodyReturnsFormFieldsForUrlencodedForm($request) + public function testGetParsedBodyReturnsFormFieldsForUrlencodedForm($contentType) { + $_SERVER = [ + "HTTP_HOST" => "localhost", + "HTTP_CONTENT_TYPE" => $contentType, + ]; + $_COOKIE = []; + $_FILES = []; $_POST = [ "dog" => "Bear" ]; - - /** @var ServerRequest $request */ - $request = $request->withHeader("Content-type", "application/x-www-form-urlencoded"); + $request = new ServerRequest(); + $request = $request->withServerRequest(); $this->assertEquals("Bear", $request->getParsedBody()["dog"]); } - /** - * @covers WellRESTed\Message\ServerRequest::getParsedBody - * @uses WellRESTed\Message\ServerRequest::__clone - * @uses WellRESTed\Message\Request - * @uses WellRESTed\Message\Message - * @uses WellRESTed\Message\HeaderCollection - * @preserveGlobalState disabled - * @depends testWithServerRequestReadsFromRequest - */ - public function testGetParsedBodyReturnsFormFieldsForMultipartForm($request) + public function formContentTypeProvider() { - $_POST = [ - "dog" => "Bear" + return [ + ["application/x-www-form-urlencoded"], + ["multipart/form-data"] ]; - - /** @var ServerRequest $request */ - $request = $request->withHeader("Content-type", "multipart/form-data"); - $this->assertEquals("Bear", $request->getParsedBody()["dog"]); } /** * @covers WellRESTed\Message\ServerRequest::withParsedBody * @uses WellRESTed\Message\ServerRequest::getParsedBody + * @uses WellRESTed\Message\ServerRequest::__construct * @uses WellRESTed\Message\ServerRequest::__clone + * @uses WellRESTed\Message\ServerRequest::withServerRequest + * @uses WellRESTed\Message\ServerRequest::updateWithServerRequest + * @uses WellRESTed\Message\ServerRequest::getServerRequestHeaders * @uses WellRESTed\Message\Request * @uses WellRESTed\Message\Message * @uses WellRESTed\Message\HeaderCollection * @preserveGlobalState disabled - * @depends testWithServerRequestReadsFromRequest */ - public function testWithParsedBodyCreatesNewInstance($request1) + public function testWithParsedBodyCreatesNewInstance() { + $_SERVER = [ + "HTTP_HOST" => "localhost", + "HTTP_CONTENT_TYPE" => "application/x-www-form-urlencoded", + ]; + $_COOKIE = []; + $_FILES = []; $_POST = [ "dog" => "Bear" ]; - - /** @var ServerRequest $request1 */ - $request1 = $request1->withHeader("Content-type", "application/x-www-form-urlencoded"); + $request1 = new ServerRequest(); + $request1 = $request1->withServerRequest(); $body1 = $request1->getParsedBody(); + $request2 = $request1->withParsedBody([ "guinea_pig" => "Clyde" ]); @@ -392,6 +393,4 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase $this->assertEquals("Molly", $attributes["cat"]); $this->assertEquals("Bear", $attributes["dog"]); } - - }