From c97d40f837254b45a0bb74df349b2efc15ac797e Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 6 Feb 2013 22:23:26 +0100 Subject: [PATCH 1/2] fixed Request management for FragmentHandler --- .../Extension/HttpKernelExtensionTest.php | 10 +---- .../Resources/config/fragment_renderer.xml | 2 +- .../HttpKernel/Fragment/FragmentHandler.php | 39 ++++--------------- .../Tests/Fragment/FragmentHandlerTest.php | 16 +------- 4 files changed, 11 insertions(+), 56 deletions(-) diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php index c0dc42d2f35f0..8e5e4d1d4756b 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/HttpKernelExtensionTest.php @@ -49,16 +49,8 @@ protected function getFragmentHandler($return) $strategy->expects($this->once())->method('getName')->will($this->returnValue('inline')); $strategy->expects($this->once())->method('render')->will($return); - // simulate a master request - $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\GetResponseEvent')->disableOriginalConstructor()->getMock(); - $event - ->expects($this->once()) - ->method('getRequest') - ->will($this->returnValue(Request::create('/'))) - ; - $renderer = new FragmentHandler(array($strategy)); - $renderer->onKernelRequest($event); + $renderer->setRequest(Request::create('/')); return $renderer; } diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_renderer.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_renderer.xml index cbe3db3257b6e..662f042adeeac 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_renderer.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_renderer.xml @@ -14,9 +14,9 @@ - %kernel.debug% + diff --git a/src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php b/src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php index b4f3f9c1eef47..70de8d0e2bdd2 100644 --- a/src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php +++ b/src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php @@ -15,10 +15,6 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpKernel\Controller\ControllerReference; -use Symfony\Component\HttpKernel\KernelEvents; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\HttpKernel\Event\FilterResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Renders a URI that represents a resource fragment. @@ -30,11 +26,11 @@ * * @see FragmentRendererInterface */ -class FragmentHandler implements EventSubscriberInterface +class FragmentHandler { private $debug; private $renderers; - private $requests; + private $request; /** * Constructor. @@ -49,7 +45,6 @@ public function __construct(array $renderers = array(), $debug = false) $this->addRenderer($renderer); } $this->debug = $debug; - $this->requests = array(); } /** @@ -63,23 +58,13 @@ public function addRenderer(FragmentRendererInterface $renderer) } /** - * Stores the Request object. + * Sets the current Request. * - * @param GetResponseEvent $event A GetResponseEvent instance + * @param Request $request The current Request */ - public function onKernelRequest(GetResponseEvent $event) + public function setRequest(Request $request = null) { - array_unshift($this->requests, $event->getRequest()); - } - - /** - * Removes the most recent Request object. - * - * @param FilterResponseEvent $event A FilterResponseEvent instance - */ - public function onKernelResponse(FilterResponseEvent $event) - { - array_shift($this->requests); + $this->request = $request; } /** @@ -108,7 +93,7 @@ public function render($uri, $renderer = 'inline', array $options = array()) throw new \InvalidArgumentException(sprintf('The "%s" renderer does not exist.', $renderer)); } - return $this->deliver($this->renderers[$renderer]->render($uri, $this->requests[0], $options)); + return $this->deliver($this->renderers[$renderer]->render($uri, $this->request, $options)); } /** @@ -126,7 +111,7 @@ public function render($uri, $renderer = 'inline', array $options = array()) protected function deliver(Response $response) { if (!$response->isSuccessful()) { - throw new \RuntimeException(sprintf('Error when rendering "%s" (Status code is %s).', $this->requests[0]->getUri(), $response->getStatusCode())); + throw new \RuntimeException(sprintf('Error when rendering "%s" (Status code is %s).', $this->request->getUri(), $response->getStatusCode())); } if (!$response instanceof StreamedResponse) { @@ -136,14 +121,6 @@ protected function deliver(Response $response) $response->sendContent(); } - public static function getSubscribedEvents() - { - return array( - KernelEvents::REQUEST => 'onKernelRequest', - KernelEvents::RESPONSE => 'onKernelResponse', - ); - } - // to be removed in 2.3 public function fixOptions(array $options) { diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php index e0a5b0ad59342..f2a0838a46424 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/FragmentHandlerTest.php @@ -17,13 +17,6 @@ class FragmentHandlerTest extends \PHPUnit_Framework_TestCase { - protected function setUp() - { - if (!class_exists('Symfony\Component\EventDispatcher\EventDispatcher')) { - $this->markTestSkipped('The "EventDispatcher" component is not available'); - } - } - /** * @expectedException \InvalidArgumentException */ @@ -102,14 +95,7 @@ protected function getHandler($returnValue, $arguments = array()) $handler = new FragmentHandler(); $handler->addRenderer($renderer); - - $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\GetResponseEvent')->disableOriginalConstructor()->getMock(); - $event - ->expects($this->once()) - ->method('getRequest') - ->will($this->returnValue(Request::create('/'))) - ; - $handler->onKernelRequest($event); + $handler->setRequest(Request::create('/')); return $handler; } From 62e52690e321bb88545f47f8ca1432960835cf5f Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 20 Mar 2013 16:45:42 +0100 Subject: [PATCH 2/2] [HttpKernel] added a safeguard for when a fragment is rendered outside the context of a master request --- src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php b/src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php index 70de8d0e2bdd2..54d0a70b7dbec 100644 --- a/src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php +++ b/src/Symfony/Component/HttpKernel/Fragment/FragmentHandler.php @@ -93,6 +93,10 @@ public function render($uri, $renderer = 'inline', array $options = array()) throw new \InvalidArgumentException(sprintf('The "%s" renderer does not exist.', $renderer)); } + if (null === $this->request) { + throw new \LogicException('Rendering a fragment can only be done when handling a master Request.'); + } + return $this->deliver($this->renderers[$renderer]->render($uri, $this->request, $options)); } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy