diff --git a/src/Symfony/Component/Routing/RequestContext.php b/src/Symfony/Component/Routing/RequestContext.php index c8fcf445dd16..b6c71ffeebd3 100644 --- a/src/Symfony/Component/Routing/RequestContext.php +++ b/src/Symfony/Component/Routing/RequestContext.php @@ -16,6 +16,8 @@ /** * Holds information about the current request. * + * This class implements a fluent interface. + * * @author Fabien Potencier * @author Tobias Schultze * @@ -67,6 +69,8 @@ public function __construct($baseUrl = '', $method = 'GET', $host = 'localhost', * Updates the RequestContext information based on a HttpFoundation Request. * * @param Request $request A Request instance + * + * @return RequestContext The current instance, implementing a fluent interface */ public function fromRequest(Request $request) { @@ -78,6 +82,8 @@ public function fromRequest(Request $request) $this->setHttpPort($request->isSecure() ? $this->httpPort : $request->getPort()); $this->setHttpsPort($request->isSecure() ? $request->getPort() : $this->httpsPort); $this->setQueryString($request->server->get('QUERY_STRING', '')); + + return $this; } /** @@ -95,11 +101,15 @@ public function getBaseUrl() * * @param string $baseUrl The base URL * + * @return RequestContext The current instance, implementing a fluent interface + * * @api */ public function setBaseUrl($baseUrl) { $this->baseUrl = $baseUrl; + + return $this; } /** @@ -116,10 +126,14 @@ public function getPathInfo() * Sets the path info. * * @param string $pathInfo The path info + * + * @return RequestContext The current instance, implementing a fluent interface */ public function setPathInfo($pathInfo) { $this->pathInfo = $pathInfo; + + return $this; } /** @@ -139,11 +153,15 @@ public function getMethod() * * @param string $method The HTTP method * + * @return RequestContext The current instance, implementing a fluent interface + * * @api */ public function setMethod($method) { $this->method = strtoupper($method); + + return $this; } /** @@ -163,11 +181,15 @@ public function getHost() * * @param string $host The HTTP host * + * @return RequestContext The current instance, implementing a fluent interface + * * @api */ public function setHost($host) { $this->host = strtolower($host); + + return $this; } /** @@ -185,11 +207,15 @@ public function getScheme() * * @param string $scheme The HTTP scheme * + * @return RequestContext The current instance, implementing a fluent interface + * * @api */ public function setScheme($scheme) { $this->scheme = strtolower($scheme); + + return $this; } /** @@ -207,11 +233,15 @@ public function getHttpPort() * * @param int $httpPort The HTTP port * + * @return RequestContext The current instance, implementing a fluent interface + * * @api */ public function setHttpPort($httpPort) { $this->httpPort = (int) $httpPort; + + return $this; } /** @@ -229,11 +259,15 @@ public function getHttpsPort() * * @param int $httpsPort The HTTPS port * + * @return RequestContext The current instance, implementing a fluent interface + * * @api */ public function setHttpsPort($httpsPort) { $this->httpsPort = (int) $httpsPort; + + return $this; } /** @@ -251,12 +285,16 @@ public function getQueryString() * * @param string $queryString The query string (after "?") * + * @return RequestContext The current instance, implementing a fluent interface + * * @api */ public function setQueryString($queryString) { // string cast to be fault-tolerant, accepting null $this->queryString = (string) $queryString; + + return $this; } /** @@ -313,10 +351,14 @@ public function hasParameter($name) * @param string $name A parameter name * @param mixed $parameter The parameter value * + * @return RequestContext The current instance, implementing a fluent interface + * * @api */ public function setParameter($name, $parameter) { $this->parameters[$name] = $parameter; + + return $this; } } diff --git a/src/Symfony/Component/Routing/Tests/RequestContextTest.php b/src/Symfony/Component/Routing/Tests/RequestContextTest.php index 98fac0b721a5..58612683ef13 100644 --- a/src/Symfony/Component/Routing/Tests/RequestContextTest.php +++ b/src/Symfony/Component/Routing/Tests/RequestContextTest.php @@ -140,4 +140,20 @@ public function testPort() $this->assertSame(123, $requestContext->getHttpPort()); $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')); + } }