ServerRequest::getServerRequest reads method, request target, and protocol version from request.

This commit is contained in:
PJ Dietz 2015-04-12 14:17:12 -04:00
parent 963e1acd58
commit 79be20c826
3 changed files with 91 additions and 3 deletions

View File

@ -8,11 +8,11 @@ use Psr\Http\Message\UriInterface;
class Request extends Message implements RequestInterface
{
/** @var string */
private $method = "GET";
protected $method = "GET";
/** @var string */
private $requestTarget;
protected $requestTarget;
/** @var UriInterface */
private $uri;
protected $uri;
// ------------------------------------------------------------------------
// Psr\Http\Message\RequestInterface

View File

@ -299,6 +299,16 @@ class ServerRequest extends Request implements ServerRequestInterface
if (isset($_SERVER["QUERY_STRING"])) {
parse_str($_SERVER["QUERY_STRING"], $this->queryParams);
}
if (isset($_SERVER["SERVER_PROTOCOL"]) && $_SERVER["SERVER_PROTOCOL"] === "HTTP/1.0") {
// The default is 1.1, so only update if 1.0
$this->protcolVersion = "1.0";
}
if (isset($_SERVER["REQUEST_METHOD"])) {
$this->method = $_SERVER["REQUEST_METHOD"];
}
if (isset($_SERVER["REQUEST_URI"])) {
$this->requestTarget = $_SERVER["REQUEST_URI"];
}
$headers = $this->getServerRequestHeaders();
foreach ($headers as $key => $value) {
$this->headers[$key] = $value;

View File

@ -321,6 +321,84 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
$headers = $request->getHeaders();
$this->assertNotNull($headers);
}
/**
* @covers WellRESTed\Message\ServerRequest::readFromServerRequest
* @preserveGlobalState disabled
* @dataProvider protocolVersionProvider
*/
public function testReadsProtocolVersionFromFromRequest($expectedProtocol, $serverProtocol)
{
$_SERVER = [
"HTTP_HOST" => "localhost",
"SERVER_PROTOCOL" => $serverProtocol,
"REQUEST_METHOD" => "GET"
];
$request = ServerRequest::getServerRequest();
$this->assertEquals($expectedProtocol, $request->getProtocolVersion());
}
public function protocolVersionProvider()
{
return [
["1.1", "HTTP/1.1"],
["1.0", "HTTP/1.0"],
["1.1", null],
["1.1", "INVALID"]
];
}
/**
* @covers WellRESTed\Message\ServerRequest::readFromServerRequest
* @preserveGlobalState disabled
* @dataProvider methodProvider
*/
public function testReadsMethodFromFromRequest($exectedMethod, $serverMethod)
{
$_SERVER = [
"HTTP_HOST" => "localhost",
"REQUEST_METHOD" => $serverMethod
];
$request = ServerRequest::getServerRequest();
$this->assertEquals($exectedMethod, $request->getMethod());
}
public function methodProvider()
{
return [
["GET", "GET"],
["POST", "POST"],
["DELETE", "DELETE"],
["PUT", "PUT"],
["OPTIONS", "OPTIONS"],
["GET", null]
];
}
/**
* @covers WellRESTed\Message\ServerRequest::readFromServerRequest
* @preserveGlobalState disabled
* @dataProvider requestTargetProvider
*/
public function testReadsRequestTargetFromServer($exectedRequestTarget, $serverRequestUri)
{
$_SERVER = [
"HTTP_HOST" => "localhost",
"REQUEST_URI" => $serverRequestUri
];
$request = ServerRequest::getServerRequest();
$this->assertEquals($exectedRequestTarget, $request->getRequestTarget());
}
public function requestTargetProvider()
{
return [
["/", "/"],
["/hello", "/hello"],
["/my/path.txt", "/my/path.txt"],
["/", null]
];
}
}
// ----------------------------------------------------------------------------