Pārlūkot izejas kodu

[FrameworkBundle] fixed duplicated RequestContext instances

Fabien Potencier 13 gadi atpakaļ
vecāks
revīzija
d7f078929c

+ 7 - 10
src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php

@@ -49,19 +49,16 @@ class RouterListener
         }
 
         $request = $event->getRequest();
+        $context = $this->router->getContext();
 
         // set the context even if the parsing does not need to be done
         // to have correct link generation
-        $context = new RequestContext(
-            $request->getBaseUrl(),
-            $request->getMethod(),
-            $request->getHost(),
-            $request->getScheme(),
-            $request->isSecure() ? $this->httpPort : $request->getPort(),
-            $request->isSecure() ? $request->getPort() : $this->httpsPort
-        );
-
-        $this->router->setContext($context);
+        $context->setBaseUrl($request->getBaseUrl());
+        $context->setMethod($request->getMethod());
+        $context->setHost($request->getHost());
+        $context->setScheme($request->getScheme());
+        $context->setHttpPort($request->isSecure() ? $this->httpPort : $request->getPort());
+        $context->setHttpsPort($request->isSecure() ? $request->getPort() : $this->httpsPort);
     }
 
     public function onKernelRequest(GetResponseEvent $event)

+ 10 - 15
src/Symfony/Bundle/FrameworkBundle/Tests/EventListener/RouterListenerTest.php

@@ -20,17 +20,17 @@ use Symfony\Component\Routing\RequestContext;
 class RouterListenerTest extends \PHPUnit_Framework_TestCase
 {
     private $router;
+    private $context;
 
     protected function setUp()
     {
-        $this->router = $this->getMockBuilder('Symfony\Component\Routing\RouterInterface')
+        $this->router = $this->getMockBuilder('Symfony\Component\Routing\Router')
                              ->disableOriginalConstructor()
                              ->getMock();
-    }
-
-    protected function tearDown()
-    {
-        $this->router = null;
+        $this->context = new RequestContext();
+        $this->router->expects($this->any())
+                     ->method('getContext')
+                     ->will($this->returnValue($this->context));
     }
 
     /**
@@ -39,17 +39,12 @@ class RouterListenerTest extends \PHPUnit_Framework_TestCase
     public function testPort($defaultHttpPort, $defaultHttpsPort, $uri, $expectedHttpPort, $expectedHttpsPort)
     {
         $listener = new RouterListener($this->router, $defaultHttpPort, $defaultHttpsPort);
-
-        $expectedContext = new RequestContext();
-        $expectedContext->setHttpPort($expectedHttpPort);
-        $expectedContext->setHttpsPort($expectedHttpsPort);
-        $expectedContext->setScheme(0 === strpos($uri, 'https') ? 'https' : 'http');
-        $this->router->expects($this->once())
-                     ->method('setContext')
-                     ->with($expectedContext);
-
         $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());
     }
 
     public function getPortData()