Read headers in ServerRequest
- Add withServerRequest - Add updateWithServerRequest - Add getServerRequestHeaders
This commit is contained in:
parent
fe93ab13c1
commit
fcbdd1ebfb
|
|
@ -291,6 +291,24 @@ class ServerRequest extends Request implements ServerRequestInterface
|
|||
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Create a new instance based on the request sent to the server.
|
||||
*/
|
||||
public function withServerRequest($options = null)
|
||||
{
|
||||
$request = clone $this;
|
||||
self::updateWithServerRequest($request);
|
||||
return $request;
|
||||
}
|
||||
|
||||
public function __clone()
|
||||
{
|
||||
if (is_object($this->parsedBody)) {
|
||||
$this->parsedBody = clone $this->parsedBody;
|
||||
}
|
||||
parent::__clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a reference to the singleton instance of the Request derived
|
||||
* from the server's information about the request sent to the server.
|
||||
|
|
@ -302,6 +320,14 @@ class ServerRequest extends Request implements ServerRequestInterface
|
|||
{
|
||||
if (!isset(self::$serverRequest)) {
|
||||
$request = new self();
|
||||
self::updateWithServerRequest($request);
|
||||
self::$serverRequest = $request;
|
||||
}
|
||||
return self::$serverRequest;
|
||||
}
|
||||
|
||||
private function updateWithServerRequest(&$request)
|
||||
{
|
||||
$request->serverParams = $_SERVER;
|
||||
$request->cookieParams = $_COOKIE;
|
||||
$request->fileParams = $_FILES;
|
||||
|
|
@ -309,16 +335,31 @@ class ServerRequest extends Request implements ServerRequestInterface
|
|||
if (isset($_SERVER["QUERY_STRING"])) {
|
||||
parse_str($_SERVER["QUERY_STRING"], $request->queryParams);
|
||||
}
|
||||
self::$serverRequest = $request;
|
||||
$headers = self::getServerRequestHeaders();
|
||||
foreach ($headers as $key => $value) {
|
||||
$request->headers[$key] = $value;
|
||||
}
|
||||
return self::$serverRequest;
|
||||
}
|
||||
|
||||
public function __clone()
|
||||
/**
|
||||
* Read and return all request headers from the request issued to the server.
|
||||
*
|
||||
* @return array Associative array of headers
|
||||
*/
|
||||
private static function getServerRequestHeaders()
|
||||
{
|
||||
if (is_object($this->parsedBody)) {
|
||||
$this->parsedBody = clone $this->parsedBody;
|
||||
// Prefer apache_request_headers is available.
|
||||
if (function_exists("apache_request_headers")) {
|
||||
return apache_request_headers();
|
||||
}
|
||||
parent::__clone();
|
||||
|
||||
// http://www.php.net/manual/en/function.getallheaders.php#84262
|
||||
$headers = array();
|
||||
foreach ($_SERVER as $name => $value) {
|
||||
if (substr($name, 0, 5) === "HTTP_") {
|
||||
$headers[str_replace(" ", "-", ucwords(strtolower(str_replace("_", " ", substr($name, 5)))))] = $value;
|
||||
}
|
||||
}
|
||||
return $headers;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
// This file must be in the global namespace to add apache_request_headers
|
||||
|
||||
use WellRESTed\Message\ServerRequest;
|
||||
|
||||
class ApacheRequestHeadersTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* @covers WellRESTed\Message\ServerRequest::getServerRequestHeaders
|
||||
* @uses WellRESTed\Message\ServerRequest::getServerRequest
|
||||
* @runInSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*/
|
||||
public function testReadsApacheRequestHeaders()
|
||||
{
|
||||
if (!function_exists("apache_request_headers")) {
|
||||
function apache_request_headers() {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
$_SERVER = [
|
||||
"HTTP_HOST" => "localhost",
|
||||
"HTTP_ACCEPT" => "application/json",
|
||||
"QUERY_STRING" => "guinea_pig=Claude&hamster=Fizzgig"
|
||||
];
|
||||
$_COOKIE = [
|
||||
"cat" => "Molly"
|
||||
];
|
||||
$_FILES = [
|
||||
"file" => [
|
||||
"name" => "MyFile.jpg",
|
||||
"type" => "image/jpeg",
|
||||
"tmp_name" => "/tmp/php/php6hst32",
|
||||
"error" => "UPLOAD_ERR_OK",
|
||||
"size" => 98174
|
||||
]
|
||||
];
|
||||
$_POST = [
|
||||
"dog" => "Bear"
|
||||
];
|
||||
|
||||
$request = ServerRequest::getServerRequest();
|
||||
$headers = $request->getHeaders();
|
||||
$this->assertNotNull($headers);
|
||||
}
|
||||
}
|
||||
|
|
@ -19,15 +19,20 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
/**
|
||||
* @covers WellRESTed\Message\ServerRequest::getServerRequest
|
||||
* @covers WellRESTed\Message\ServerRequest::updateWithServerRequest
|
||||
* @covers WellRESTed\Message\ServerRequest::getServerRequestHeaders
|
||||
* @uses WellRESTed\Message\ServerRequest::__construct
|
||||
* @uses WellRESTed\Message\ServerRequest::__clone
|
||||
* @uses WellRESTed\Message\Request
|
||||
* @uses WellRESTed\Message\Message
|
||||
* @uses WellRESTed\Message\HeaderCollection
|
||||
* @preserveGlobalState disabled
|
||||
*/
|
||||
public function testServerRequestProvidesRequest()
|
||||
public function testGetServerRequestReadsFromRequest()
|
||||
{
|
||||
$_SERVER = [
|
||||
"HTTP_HOST" => "localhost",
|
||||
"HTTP_ACCEPT" => "application/json",
|
||||
"QUERY_STRING" => "guinea_pig=Claude&hamster=Fizzgig"
|
||||
];
|
||||
$_COOKIE = [
|
||||
|
|
@ -47,13 +52,51 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
];
|
||||
$request = ServerRequest::getServerRequest();
|
||||
$this->assertNotNull($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers WellRESTed\Message\ServerRequest::withServerRequest
|
||||
* @covers WellRESTed\Message\ServerRequest::updateWithServerRequest
|
||||
* @covers WellRESTed\Message\ServerRequest::getServerRequestHeaders
|
||||
* @uses WellRESTed\Message\ServerRequest::__construct
|
||||
* @uses WellRESTed\Message\ServerRequest::__clone
|
||||
* @uses WellRESTed\Message\Request
|
||||
* @uses WellRESTed\Message\Message
|
||||
* @uses WellRESTed\Message\HeaderCollection
|
||||
* @preserveGlobalState disabled
|
||||
*/
|
||||
public function testWithServerRequestReadsFromRequest()
|
||||
{
|
||||
$_SERVER = [
|
||||
"HTTP_HOST" => "localhost",
|
||||
"HTTP_ACCEPT" => "application/json",
|
||||
"QUERY_STRING" => "guinea_pig=Claude&hamster=Fizzgig"
|
||||
];
|
||||
$_COOKIE = [
|
||||
"cat" => "Molly"
|
||||
];
|
||||
$_FILES = [
|
||||
"file" => [
|
||||
"name" => "MyFile.jpg",
|
||||
"type" => "image/jpeg",
|
||||
"tmp_name" => "/tmp/php/php6hst32",
|
||||
"error" => "UPLOAD_ERR_OK",
|
||||
"size" => 98174
|
||||
]
|
||||
];
|
||||
$_POST = [
|
||||
"dog" => "Bear"
|
||||
];
|
||||
$request = new ServerRequest();
|
||||
$request = $request->withServerRequest();
|
||||
$this->assertNotNull($request);
|
||||
return $request;
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers WellRESTed\Message\ServerRequest::getServerParams
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testServerRequestProvidesRequest
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testServerRequestProvidesServerParams($request)
|
||||
{
|
||||
|
|
@ -64,7 +107,7 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
/**
|
||||
* @covers WellRESTed\Message\ServerRequest::getCookieParams
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testServerRequestProvidesRequest
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testServerRequestProvidesCookieParams($request)
|
||||
{
|
||||
|
|
@ -75,7 +118,7 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
/**
|
||||
* @covers WellRESTed\Message\ServerRequest::getQueryParams
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testServerRequestProvidesRequest
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testServerRequestProvidesQueryParams($request)
|
||||
{
|
||||
|
|
@ -86,7 +129,7 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
/**
|
||||
* @covers WellRESTed\Message\ServerRequest::getFileParams
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testServerRequestProvidesRequest
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testServerRequestProvidesFilesParams($request)
|
||||
{
|
||||
|
|
@ -94,6 +137,20 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
$this->assertEquals("MyFile.jpg", $request->getFileParams()["file"]["name"]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers WellRESTed\Message\ServerRequest::getFileParams
|
||||
* @uses WellRESTed\Message\Request
|
||||
* @uses WellRESTed\Message\Message
|
||||
* @uses WellRESTed\Message\HeaderCollection
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testServerRequestProvidesHeaders($request)
|
||||
{
|
||||
/** @var ServerRequest $request */
|
||||
$this->assertEquals("application/json", $request->getHeader("Accept"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers WellRESTed\Message\ServerRequest::withCookieParams
|
||||
* @uses WellRESTed\Message\ServerRequest::getCookieParams
|
||||
|
|
@ -101,7 +158,7 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
* @uses WellRESTed\Message\Request
|
||||
* @uses WellRESTed\Message\Message
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testServerRequestProvidesRequest
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testWithCookieParamsCreatesNewInstance($request1)
|
||||
{
|
||||
|
|
@ -120,7 +177,7 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
* @uses WellRESTed\Message\Request
|
||||
* @uses WellRESTed\Message\Message
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testServerRequestProvidesRequest
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testWithQueryParamsCreatesNewInstance($request1)
|
||||
{
|
||||
|
|
@ -139,7 +196,7 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
* @uses WellRESTed\Message\Message
|
||||
* @uses WellRESTed\Message\HeaderCollection
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testServerRequestProvidesRequest
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testGetParsedBodyReturnsFormFieldsForUrlencodedForm($request)
|
||||
{
|
||||
|
|
@ -159,7 +216,7 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
* @uses WellRESTed\Message\Message
|
||||
* @uses WellRESTed\Message\HeaderCollection
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testServerRequestProvidesRequest
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testGetParsedBodyReturnsFormFieldsForMultipartForm($request)
|
||||
{
|
||||
|
|
@ -180,7 +237,7 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
|||
* @uses WellRESTed\Message\Message
|
||||
* @uses WellRESTed\Message\HeaderCollection
|
||||
* @preserveGlobalState disabled
|
||||
* @depends testServerRequestProvidesRequest
|
||||
* @depends testWithServerRequestReadsFromRequest
|
||||
*/
|
||||
public function testWithParsedBodyCreatesNewInstance($request1)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue