[Routing] unify fluent interface in RequestContext

This commit is contained in:
Tobias Schultze 2013-09-18 19:34:08 +02:00
parent 8203c66e3a
commit 41412f99f0
2 changed files with 58 additions and 0 deletions

View File

@ -16,6 +16,8 @@ use Symfony\Component\HttpFoundation\Request;
/** /**
* Holds information about the current request. * Holds information about the current request.
* *
* This class implements a fluent interface.
*
* @author Fabien Potencier <fabien@symfony.com> * @author Fabien Potencier <fabien@symfony.com>
* @author Tobias Schultze <http://tobion.de> * @author Tobias Schultze <http://tobion.de>
* *
@ -67,6 +69,8 @@ class RequestContext
* Updates the RequestContext information based on a HttpFoundation Request. * Updates the RequestContext information based on a HttpFoundation Request.
* *
* @param Request $request A Request instance * @param Request $request A Request instance
*
* @return RequestContext The current instance, implementing a fluent interface
*/ */
public function fromRequest(Request $request) public function fromRequest(Request $request)
{ {
@ -78,6 +82,8 @@ class RequestContext
$this->setHttpPort($request->isSecure() ? $this->httpPort : $request->getPort()); $this->setHttpPort($request->isSecure() ? $this->httpPort : $request->getPort());
$this->setHttpsPort($request->isSecure() ? $request->getPort() : $this->httpsPort); $this->setHttpsPort($request->isSecure() ? $request->getPort() : $this->httpsPort);
$this->setQueryString($request->server->get('QUERY_STRING', '')); $this->setQueryString($request->server->get('QUERY_STRING', ''));
return $this;
} }
/** /**
@ -95,11 +101,15 @@ class RequestContext
* *
* @param string $baseUrl The base URL * @param string $baseUrl The base URL
* *
* @return RequestContext The current instance, implementing a fluent interface
*
* @api * @api
*/ */
public function setBaseUrl($baseUrl) public function setBaseUrl($baseUrl)
{ {
$this->baseUrl = $baseUrl; $this->baseUrl = $baseUrl;
return $this;
} }
/** /**
@ -116,10 +126,14 @@ class RequestContext
* Sets the path info. * Sets the path info.
* *
* @param string $pathInfo The path info * @param string $pathInfo The path info
*
* @return RequestContext The current instance, implementing a fluent interface
*/ */
public function setPathInfo($pathInfo) public function setPathInfo($pathInfo)
{ {
$this->pathInfo = $pathInfo; $this->pathInfo = $pathInfo;
return $this;
} }
/** /**
@ -139,11 +153,15 @@ class RequestContext
* *
* @param string $method The HTTP method * @param string $method The HTTP method
* *
* @return RequestContext The current instance, implementing a fluent interface
*
* @api * @api
*/ */
public function setMethod($method) public function setMethod($method)
{ {
$this->method = strtoupper($method); $this->method = strtoupper($method);
return $this;
} }
/** /**
@ -163,11 +181,15 @@ class RequestContext
* *
* @param string $host The HTTP host * @param string $host The HTTP host
* *
* @return RequestContext The current instance, implementing a fluent interface
*
* @api * @api
*/ */
public function setHost($host) public function setHost($host)
{ {
$this->host = strtolower($host); $this->host = strtolower($host);
return $this;
} }
/** /**
@ -185,11 +207,15 @@ class RequestContext
* *
* @param string $scheme The HTTP scheme * @param string $scheme The HTTP scheme
* *
* @return RequestContext The current instance, implementing a fluent interface
*
* @api * @api
*/ */
public function setScheme($scheme) public function setScheme($scheme)
{ {
$this->scheme = strtolower($scheme); $this->scheme = strtolower($scheme);
return $this;
} }
/** /**
@ -207,11 +233,15 @@ class RequestContext
* *
* @param int $httpPort The HTTP port * @param int $httpPort The HTTP port
* *
* @return RequestContext The current instance, implementing a fluent interface
*
* @api * @api
*/ */
public function setHttpPort($httpPort) public function setHttpPort($httpPort)
{ {
$this->httpPort = (int) $httpPort; $this->httpPort = (int) $httpPort;
return $this;
} }
/** /**
@ -229,11 +259,15 @@ class RequestContext
* *
* @param int $httpsPort The HTTPS port * @param int $httpsPort The HTTPS port
* *
* @return RequestContext The current instance, implementing a fluent interface
*
* @api * @api
*/ */
public function setHttpsPort($httpsPort) public function setHttpsPort($httpsPort)
{ {
$this->httpsPort = (int) $httpsPort; $this->httpsPort = (int) $httpsPort;
return $this;
} }
/** /**
@ -251,12 +285,16 @@ class RequestContext
* *
* @param string $queryString The query string (after "?") * @param string $queryString The query string (after "?")
* *
* @return RequestContext The current instance, implementing a fluent interface
*
* @api * @api
*/ */
public function setQueryString($queryString) public function setQueryString($queryString)
{ {
// string cast to be fault-tolerant, accepting null // string cast to be fault-tolerant, accepting null
$this->queryString = (string) $queryString; $this->queryString = (string) $queryString;
return $this;
} }
/** /**
@ -313,10 +351,14 @@ class RequestContext
* @param string $name A parameter name * @param string $name A parameter name
* @param mixed $parameter The parameter value * @param mixed $parameter The parameter value
* *
* @return RequestContext The current instance, implementing a fluent interface
*
* @api * @api
*/ */
public function setParameter($name, $parameter) public function setParameter($name, $parameter)
{ {
$this->parameters[$name] = $parameter; $this->parameters[$name] = $parameter;
return $this;
} }
} }

View File

@ -140,4 +140,20 @@ class RequestContextTest extends \PHPUnit_Framework_TestCase
$this->assertSame(123, $requestContext->getHttpPort()); $this->assertSame(123, $requestContext->getHttpPort());
$this->assertSame(456, $requestContext->getHttpsPort()); $this->assertSame(456, $requestContext->getHttpsPort());
} }
public function testFluentInterface()
{
$requestContext = new RequestContext();
$this->assertSame($requestContext, $requestContext->setBaseUrl('/app.php'));
$this->assertSame($requestContext, $requestContext->setPathInfo('/index'));
$this->assertSame($requestContext, $requestContext->setMethod('POST'));
$this->assertSame($requestContext, $requestContext->setScheme('https'));
$this->assertSame($requestContext, $requestContext->setHost('example.com'));
$this->assertSame($requestContext, $requestContext->setQueryString('foo=bar'));
$this->assertSame($requestContext, $requestContext->setHttpPort(80));
$this->assertSame($requestContext, $requestContext->setHttpsPort(443));
$this->assertSame($requestContext, $requestContext->setParameters(array()));
$this->assertSame($requestContext, $requestContext->setParameter('foo', 'bar'));
}
} }