Assign $_POST to parsedBody on creation if form content header is set.

This commit is contained in:
PJ Dietz 2015-03-24 19:37:36 -04:00
parent fcbdd1ebfb
commit 166fc66117
2 changed files with 41 additions and 40 deletions

View File

@ -164,12 +164,6 @@ class ServerRequest extends Request implements ServerRequestInterface
*/ */
public function getParsedBody() 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; return $this->parsedBody;
} }
@ -326,6 +320,10 @@ class ServerRequest extends Request implements ServerRequestInterface
return self::$serverRequest; 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) private function updateWithServerRequest(&$request)
{ {
$request->serverParams = $_SERVER; $request->serverParams = $_SERVER;
@ -339,6 +337,10 @@ class ServerRequest extends Request implements ServerRequestInterface
foreach ($headers as $key => $value) { foreach ($headers as $key => $value) {
$request->headers[$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;
}
} }
/** /**

View File

@ -47,9 +47,6 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
"size" => 98174 "size" => 98174
] ]
]; ];
$_POST = [
"dog" => "Bear"
];
$request = ServerRequest::getServerRequest(); $request = ServerRequest::getServerRequest();
$this->assertNotNull($request); $this->assertNotNull($request);
} }
@ -84,9 +81,6 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
"size" => 98174 "size" => 98174
] ]
]; ];
$_POST = [
"dog" => "Bear"
];
$request = new ServerRequest(); $request = new ServerRequest();
$request = $request->withServerRequest(); $request = $request->withServerRequest();
$this->assertNotNull($request); $this->assertNotNull($request);
@ -191,63 +185,70 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
/** /**
* @covers WellRESTed\Message\ServerRequest::getParsedBody * @covers WellRESTed\Message\ServerRequest::getParsedBody
* @covers WellRESTed\Message\ServerRequest::updateWithServerRequest
* @uses WellRESTed\Message\ServerRequest::__construct
* @uses WellRESTed\Message\ServerRequest::__clone * @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\Request
* @uses WellRESTed\Message\Message * @uses WellRESTed\Message\Message
* @uses WellRESTed\Message\HeaderCollection * @uses WellRESTed\Message\HeaderCollection
* @preserveGlobalState disabled * @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 = [ $_POST = [
"dog" => "Bear" "dog" => "Bear"
]; ];
$request = new ServerRequest();
/** @var ServerRequest $request */ $request = $request->withServerRequest();
$request = $request->withHeader("Content-type", "application/x-www-form-urlencoded");
$this->assertEquals("Bear", $request->getParsedBody()["dog"]); $this->assertEquals("Bear", $request->getParsedBody()["dog"]);
} }
/** public function formContentTypeProvider()
* @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)
{ {
$_POST = [ return [
"dog" => "Bear" ["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 * @covers WellRESTed\Message\ServerRequest::withParsedBody
* @uses WellRESTed\Message\ServerRequest::getParsedBody * @uses WellRESTed\Message\ServerRequest::getParsedBody
* @uses WellRESTed\Message\ServerRequest::__construct
* @uses WellRESTed\Message\ServerRequest::__clone * @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\Request
* @uses WellRESTed\Message\Message * @uses WellRESTed\Message\Message
* @uses WellRESTed\Message\HeaderCollection * @uses WellRESTed\Message\HeaderCollection
* @preserveGlobalState disabled * @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 = [ $_POST = [
"dog" => "Bear" "dog" => "Bear"
]; ];
$request1 = new ServerRequest();
/** @var ServerRequest $request1 */ $request1 = $request1->withServerRequest();
$request1 = $request1->withHeader("Content-type", "application/x-www-form-urlencoded");
$body1 = $request1->getParsedBody(); $body1 = $request1->getParsedBody();
$request2 = $request1->withParsedBody([ $request2 = $request1->withParsedBody([
"guinea_pig" => "Clyde" "guinea_pig" => "Clyde"
]); ]);
@ -392,6 +393,4 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
$this->assertEquals("Molly", $attributes["cat"]); $this->assertEquals("Molly", $attributes["cat"]);
$this->assertEquals("Bear", $attributes["dog"]); $this->assertEquals("Bear", $attributes["dog"]);
} }
} }