Request::getUri always returns a URI
This commit is contained in:
parent
212bb6871e
commit
534bd43d9b
|
|
@ -14,6 +14,20 @@ class Request extends Message implements RequestInterface
|
||||||
/** @var UriInterface */
|
/** @var UriInterface */
|
||||||
protected $uri;
|
protected $uri;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->uri = new Uri();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __clone()
|
||||||
|
{
|
||||||
|
$this->uri = clone $this->uri;
|
||||||
|
parent::__clone();
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Psr\Http\Message\RequestInterface
|
// Psr\Http\Message\RequestInterface
|
||||||
|
|
||||||
|
|
@ -35,17 +49,20 @@ class Request extends Message implements RequestInterface
|
||||||
*/
|
*/
|
||||||
public function getRequestTarget()
|
public function getRequestTarget()
|
||||||
{
|
{
|
||||||
|
// Use the explicitly set request target first.
|
||||||
if (isset($this->requestTarget)) {
|
if (isset($this->requestTarget)) {
|
||||||
return $this->requestTarget;
|
return $this->requestTarget;
|
||||||
} elseif (isset($this->uri)) {
|
}
|
||||||
|
|
||||||
|
// Build the origin form from the composed URI.
|
||||||
$target = $this->uri->getPath();
|
$target = $this->uri->getPath();
|
||||||
$query = $this->uri->getQuery();
|
$query = $this->uri->getQuery();
|
||||||
if ($query) {
|
if ($query) {
|
||||||
$target .= "?" . $query;
|
$target .= "?" . $query;
|
||||||
}
|
}
|
||||||
return $target;
|
|
||||||
}
|
// Return "/" if the origin form is empty.
|
||||||
return "/";
|
return $target ?: "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -100,7 +117,7 @@ class Request extends Message implements RequestInterface
|
||||||
public function withMethod($method)
|
public function withMethod($method)
|
||||||
{
|
{
|
||||||
$request = clone $this;
|
$request = clone $this;
|
||||||
$request->method = $method;
|
$request->method = $this->getValidatedMethod($method);
|
||||||
return $request;
|
return $request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -169,11 +186,20 @@ class Request extends Message implements RequestInterface
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
public function __clone()
|
/**
|
||||||
|
* @param string $method
|
||||||
|
* @return string
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
private function getValidatedMethod($method)
|
||||||
{
|
{
|
||||||
if (isset($this->uri)) {
|
if (!is_string($method)) {
|
||||||
$this->uri = clone $this->uri;
|
throw new \InvalidArgumentException("Method must be a string.");
|
||||||
}
|
}
|
||||||
parent::__clone();
|
$method = trim($method);
|
||||||
|
if (strpos($method, " ") !== false) {
|
||||||
|
throw new \InvalidArgumentException("Method cannot contain spaces.");
|
||||||
|
}
|
||||||
|
return $method;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,28 @@
|
||||||
namespace WellRESTed\Test\Unit\Message;
|
namespace WellRESTed\Test\Unit\Message;
|
||||||
|
|
||||||
use WellRESTed\Message\Request;
|
use WellRESTed\Message\Request;
|
||||||
|
use WellRESTed\Message\Uri;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @uses WellRESTed\Message\Request
|
* @uses WellRESTed\Message\Request
|
||||||
* @uses WellRESTed\Message\Request
|
* @uses WellRESTed\Message\Request
|
||||||
* @uses WellRESTed\Message\Message
|
* @uses WellRESTed\Message\Message
|
||||||
* @uses WellRESTed\Message\HeaderCollection
|
* @uses WellRESTed\Message\HeaderCollection
|
||||||
|
* @uses WellRESTed\Message\Uri
|
||||||
*/
|
*/
|
||||||
class RequestTest extends \PHPUnit_Framework_TestCase
|
class RequestTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers WellRESTed\Message\Request::__construct
|
||||||
|
*/
|
||||||
|
public function testCreatesInstance()
|
||||||
|
{
|
||||||
|
$request = new Request();
|
||||||
|
$this->assertNotNull($request);
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Request Target
|
// Request Target
|
||||||
|
|
||||||
|
|
@ -74,6 +87,7 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers WellRESTed\Message\Request::withMethod
|
* @covers WellRESTed\Message\Request::withMethod
|
||||||
|
* @covers WellRESTed\Message\Request::getValidatedMethod
|
||||||
* @covers WellRESTed\Message\Request::getMethod
|
* @covers WellRESTed\Message\Request::getMethod
|
||||||
*/
|
*/
|
||||||
public function testWithMethodCreatesNewInstance()
|
public function testWithMethodCreatesNewInstance()
|
||||||
|
|
@ -83,9 +97,41 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
||||||
$this->assertEquals("POST", $request->getMethod());
|
$this->assertEquals("POST", $request->getMethod());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers WellRESTed\Message\Request::withMethod
|
||||||
|
* @covers WellRESTed\Message\Request::getValidatedMethod
|
||||||
|
* @dataProvider invalidMethodProvider
|
||||||
|
* @expectedException \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testWithMethoThrowsExceptionOnInvalidMethod($method)
|
||||||
|
{
|
||||||
|
$request = new Request();
|
||||||
|
$request->withMethod($method);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function invalidMethodProvider()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[0],
|
||||||
|
[false],
|
||||||
|
["WITH SPACE"]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Request URI
|
// Request URI
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers WellRESTed\Message\Request::getUri
|
||||||
|
* @
|
||||||
|
*/
|
||||||
|
public function testGetUriReturnsEmptyUriByDefault()
|
||||||
|
{
|
||||||
|
$request = new Request();
|
||||||
|
$uri = new Uri();
|
||||||
|
$this->assertEquals($uri, $request->getUri());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers WellRESTed\Message\Request::withUri
|
* @covers WellRESTed\Message\Request::withUri
|
||||||
* @covers WellRESTed\Message\Request::getUri
|
* @covers WellRESTed\Message\Request::getUri
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ use WellRESTed\Message\UploadedFile;
|
||||||
* @uses WellRESTed\Message\HeaderCollection
|
* @uses WellRESTed\Message\HeaderCollection
|
||||||
* @uses WellRESTed\Message\Stream
|
* @uses WellRESTed\Message\Stream
|
||||||
* @uses WellRESTed\Message\UploadedFile
|
* @uses WellRESTed\Message\UploadedFile
|
||||||
|
* @uses WellRESTed\Message\Uri
|
||||||
*/
|
*/
|
||||||
class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
class ServerRequestTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue