Skip to content

Commit 4539e5c

Browse files
committed
moved configuration of the default HTTP and HTTPS ports from RouterListener to RequestContext
1 parent 658722b commit 4539e5c

File tree

4 files changed

+41
-32
lines changed

4 files changed

+41
-32
lines changed

src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
<parameters>
88
<parameter key="router.class">Symfony\Bundle\FrameworkBundle\Routing\Router</parameter>
9+
<parameter key="router.request_context.class">Symfony\Component\Routing\RequestContext</parameter>
910
<parameter key="routing.loader.class">Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader</parameter>
1011
<parameter key="routing.resolver.class">Symfony\Component\Config\Loader\LoaderResolver</parameter>
1112
<parameter key="routing.loader.xml.class">Symfony\Component\Routing\Loader\XmlFileLoader</parameter>
@@ -63,9 +64,20 @@
6364
<argument key="matcher_dumper_class">%router.options.matcher_dumper_class%</argument>
6465
<argument key="matcher_cache_class">%router.options.matcher.cache_class%</argument>
6566
</argument>
67+
<argument type="service" id="routing.request_context" on-invalid="ignore" />
6668
</service>
69+
6770
<service id="router" alias="router.default" />
6871

72+
<service id="router.request_context" class="%router.request_context.class%" public="false">
73+
<argument></argument>
74+
<argument>GET</argument>
75+
<argument>localhost</argument>
76+
<argument>http</argument>
77+
<argument>%request_listener.http_port%</argument>
78+
<argument>%request_listener.https_port%</argument>
79+
</service>
80+
6981
<service id="router.cache_warmer" class="%router.cache_warmer.class%" public="false">
7082
<tag name="kernel.cache_warmer" />
7183
<argument type="service" id="router" />
@@ -76,8 +88,6 @@
7688
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" />
7789
<tag name="monolog.logger" channel="request" />
7890
<argument type="service" id="router" />
79-
<argument>%request_listener.http_port%</argument>
80-
<argument>%request_listener.https_port%</argument>
8191
<argument type="service" id="logger" on-invalid="ignore" />
8292
</service>
8393
</services>

src/Symfony/Component/HttpKernel/EventListener/RouterListener.php

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@
1616
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
1717
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
1818
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
19-
use Symfony\Component\HttpFoundation\Request;
2019
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
2120
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
22-
use Symfony\Component\Routing\RouterInterface;
23-
use Symfony\Component\Routing\RequestContext;
21+
use Symfony\Component\Routing\Matcher\UrlMatcherInterface;
2422

2523
/**
2624
* Initializes request attributes based on a matching route.
@@ -29,16 +27,12 @@
2927
*/
3028
class RouterListener
3129
{
32-
private $router;
30+
private $urlMatcher;
3331
private $logger;
34-
private $httpPort;
35-
private $httpsPort;
3632

37-
public function __construct(RouterInterface $router, $httpPort = 80, $httpsPort = 443, LoggerInterface $logger = null)
33+
public function __construct(UrlMatcherInterface $urlMatcher, LoggerInterface $logger = null)
3834
{
39-
$this->router = $router;
40-
$this->httpPort = $httpPort;
41-
$this->httpsPort = $httpsPort;
35+
$this->urlMatcher = $urlMatcher;
4236
$this->logger = $logger;
4337
}
4438

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

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

5650
public function onKernelRequest(GetResponseEvent $event)
@@ -64,7 +58,7 @@ public function onKernelRequest(GetResponseEvent $event)
6458

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

6963
if (null !== $this->logger) {
7064
$this->logger->info(sprintf('Matched route "%s" (parameters: %s)', $parameters['_route'], $this->parametersToString($parameters)));

src/Symfony/Component/Routing/RequestContextAwareInterface.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,13 @@ interface RequestContextAwareInterface
2424
* @api
2525
*/
2626
function setContext(RequestContext $context);
27+
28+
/**
29+
* Gets the request context.
30+
*
31+
* @return RequestContext The context
32+
*
33+
* @api
34+
*/
35+
function getContext();
2736
}

tests/Symfony/Tests/Component/HttpKernel/EventListener/RouterListenerTest.php

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,32 +19,28 @@
1919

2020
class RouterListenerTest extends \PHPUnit_Framework_TestCase
2121
{
22-
private $router;
23-
private $context;
24-
25-
protected function setUp()
26-
{
27-
$this->router = $this->getMockBuilder('Symfony\Component\Routing\Router')
28-
->disableOriginalConstructor()
29-
->getMock();
30-
$this->context = new RequestContext();
31-
$this->router->expects($this->any())
32-
->method('getContext')
33-
->will($this->returnValue($this->context));
34-
}
35-
3622
/**
3723
* @dataProvider getPortData
3824
*/
3925
public function testPort($defaultHttpPort, $defaultHttpsPort, $uri, $expectedHttpPort, $expectedHttpsPort)
4026
{
41-
$listener = new RouterListener($this->router, $defaultHttpPort, $defaultHttpsPort);
27+
$urlMatcher = $this->getMockBuilder('Symfony\Component\Routing\Matcher\UrlMatcherInterface')
28+
->disableOriginalConstructor()
29+
->getMock();
30+
$context = new RequestContext();
31+
$context->setHttpPort($defaultHttpPort);
32+
$context->setHttpsPort($defaultHttpsPort);
33+
$urlMatcher->expects($this->any())
34+
->method('getContext')
35+
->will($this->returnValue($context));
36+
37+
$listener = new RouterListener($urlMatcher);
4238
$event = $this->createGetResponseEventForUri($uri);
4339
$listener->onEarlyKernelRequest($event);
4440

45-
$this->assertEquals($expectedHttpPort, $this->context->getHttpPort());
46-
$this->assertEquals($expectedHttpsPort, $this->context->getHttpsPort());
47-
$this->assertEquals(0 === strpos($uri, 'https') ? 'https' : 'http', $this->context->getScheme());
41+
$this->assertEquals($expectedHttpPort, $context->getHttpPort());
42+
$this->assertEquals($expectedHttpsPort, $context->getHttpsPort());
43+
$this->assertEquals(0 === strpos($uri, 'https') ? 'https' : 'http', $context->getScheme());
4844
}
4945

5046
public function getPortData()

0 commit comments

Comments
 (0)