Skip to content

Commit

Permalink
moved configuration of the default HTTP and HTTPS ports from RouterLi…
Browse files Browse the repository at this point in the history
…stener to RequestContext
  • Loading branch information
fabpot committed Oct 10, 2011
1 parent 658722b commit 4539e5c
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 32 deletions.
14 changes: 12 additions & 2 deletions src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml
Expand Up @@ -6,6 +6,7 @@

<parameters>
<parameter key="router.class">Symfony\Bundle\FrameworkBundle\Routing\Router</parameter>
<parameter key="router.request_context.class">Symfony\Component\Routing\RequestContext</parameter>
<parameter key="routing.loader.class">Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader</parameter>
<parameter key="routing.resolver.class">Symfony\Component\Config\Loader\LoaderResolver</parameter>
<parameter key="routing.loader.xml.class">Symfony\Component\Routing\Loader\XmlFileLoader</parameter>
Expand Down Expand Up @@ -63,9 +64,20 @@
<argument key="matcher_dumper_class">%router.options.matcher_dumper_class%</argument>
<argument key="matcher_cache_class">%router.options.matcher.cache_class%</argument>
</argument>
<argument type="service" id="routing.request_context" on-invalid="ignore" />
</service>

<service id="router" alias="router.default" />

<service id="router.request_context" class="%router.request_context.class%" public="false">
<argument></argument>
<argument>GET</argument>
<argument>localhost</argument>
<argument>http</argument>
<argument>%request_listener.http_port%</argument>
<argument>%request_listener.https_port%</argument>
</service>

<service id="router.cache_warmer" class="%router.cache_warmer.class%" public="false">
<tag name="kernel.cache_warmer" />
<argument type="service" id="router" />
Expand All @@ -76,8 +88,6 @@
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" />
<tag name="monolog.logger" channel="request" />
<argument type="service" id="router" />
<argument>%request_listener.http_port%</argument>
<argument>%request_listener.https_port%</argument>
<argument type="service" id="logger" on-invalid="ignore" />
</service>
</services>
Expand Down
18 changes: 6 additions & 12 deletions src/Symfony/Component/HttpKernel/EventListener/RouterListener.php
Expand Up @@ -16,11 +16,9 @@
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\Matcher\UrlMatcherInterface;

/**
* Initializes request attributes based on a matching route.
Expand All @@ -29,16 +27,12 @@
*/
class RouterListener
{
private $router;
private $urlMatcher;
private $logger;
private $httpPort;
private $httpsPort;

public function __construct(RouterInterface $router, $httpPort = 80, $httpsPort = 443, LoggerInterface $logger = null)
public function __construct(UrlMatcherInterface $urlMatcher, LoggerInterface $logger = null)
{
$this->router = $router;
$this->httpPort = $httpPort;
$this->httpsPort = $httpsPort;
$this->urlMatcher = $urlMatcher;
$this->logger = $logger;
}

Expand All @@ -50,7 +44,7 @@ public function onEarlyKernelRequest(GetResponseEvent $event)

// set the context even if the parsing does not need to be done
// to have correct link generation
$this->router->getContext()->fromRequest($event->getRequest());
$this->urlMatcher->getContext()->fromRequest($event->getRequest());
}

public function onKernelRequest(GetResponseEvent $event)
Expand All @@ -64,7 +58,7 @@ public function onKernelRequest(GetResponseEvent $event)

// add attributes based on the path info (routing)
try {
$parameters = $this->router->match($request->getPathInfo());
$parameters = $this->urlMatcher->match($request->getPathInfo());

if (null !== $this->logger) {
$this->logger->info(sprintf('Matched route "%s" (parameters: %s)', $parameters['_route'], $this->parametersToString($parameters)));
Expand Down
Expand Up @@ -24,4 +24,13 @@ interface RequestContextAwareInterface
* @api
*/
function setContext(RequestContext $context);

/**
* Gets the request context.
*
* @return RequestContext The context
*
* @api
*/
function getContext();
}
Expand Up @@ -19,32 +19,28 @@

class RouterListenerTest extends \PHPUnit_Framework_TestCase
{
private $router;
private $context;

protected function setUp()
{
$this->router = $this->getMockBuilder('Symfony\Component\Routing\Router')
->disableOriginalConstructor()
->getMock();
$this->context = new RequestContext();
$this->router->expects($this->any())
->method('getContext')
->will($this->returnValue($this->context));
}

/**
* @dataProvider getPortData
*/
public function testPort($defaultHttpPort, $defaultHttpsPort, $uri, $expectedHttpPort, $expectedHttpsPort)
{
$listener = new RouterListener($this->router, $defaultHttpPort, $defaultHttpsPort);
$urlMatcher = $this->getMockBuilder('Symfony\Component\Routing\Matcher\UrlMatcherInterface')
->disableOriginalConstructor()
->getMock();
$context = new RequestContext();
$context->setHttpPort($defaultHttpPort);
$context->setHttpsPort($defaultHttpsPort);
$urlMatcher->expects($this->any())
->method('getContext')
->will($this->returnValue($context));

$listener = new RouterListener($urlMatcher);
$event = $this->createGetResponseEventForUri($uri);
$listener->onEarlyKernelRequest($event);

$this->assertEquals($expectedHttpPort, $this->context->getHttpPort());
$this->assertEquals($expectedHttpsPort, $this->context->getHttpsPort());
$this->assertEquals(0 === strpos($uri, 'https') ? 'https' : 'http', $this->context->getScheme());
$this->assertEquals($expectedHttpPort, $context->getHttpPort());
$this->assertEquals($expectedHttpsPort, $context->getHttpsPort());
$this->assertEquals(0 === strpos($uri, 'https') ? 'https' : 'http', $context->getScheme());
}

public function getPortData()
Expand Down

0 comments on commit 4539e5c

Please sign in to comment.