From c8ba3b20732df9a25949864b2b3d901b5f6a35b4 Mon Sep 17 00:00:00 2001 From: Jules Pietri Date: Fri, 22 Apr 2016 19:17:18 +0200 Subject: [PATCH 1/3] [HttpKernel] remove legacy duplicated code Finishes reverting part of 227ac77f11ae8c420d486891f7e5138ca470997a in 4f020b5686a226f92da2869d11643a559bec826d --- .../DataCollector/RequestDataCollector.php | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php index 004d6362c7101..1547d1e3f0ed6 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php @@ -143,18 +143,6 @@ public function collect(Request $request, Response $response, \Exception $except 'status_text' => Response::$statusTexts[(int) $statusCode], )); } - - if ($parentRequestAttributes = $request->attributes->get('_forwarded')) { - if ($parentRequestAttributes instanceof ParameterBag) { - $parentRequestAttributes->set('_forward_token', $response->headers->get('x-debug-token')); - } - } - if ($request->attributes->has('_forward_controller')) { - $this->data['forward'] = array( - 'token' => $request->attributes->get('_forward_token'), - 'controller' => $this->parseController($request->attributes->get('_forward_controller')), - ); - } } public function getMethod() From b26cb6d3b8d0e81aba866f756b21bb11d00093cb Mon Sep 17 00:00:00 2001 From: Jules Pietri Date: Fri, 22 Apr 2016 19:42:42 +0200 Subject: [PATCH 2/3] [HttpKernel] added RequestDataCollector::onKernelResponse() fixes redirection profile introduced in 0a1b2841f7ca964551c8339ef031ae2fb84c50b5. Prevents collecting redirect data on sub request profiling. --- .../Bundle/FrameworkBundle/CHANGELOG.md | 1 + .../DataCollector/RequestDataCollector.php | 46 +++++++++++++------ 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md index 28e45f9c27d29..b0237e402b5f0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md +++ b/src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md @@ -7,6 +7,7 @@ CHANGELOG * Added `Controller::json` to simplify creating JSON responses when using the Serializer component * Deprecated absolute template paths support in the template name parser * Deprecated using core form types without dependencies as services + * Added `Symfony\Component\HttpHernel\DataCollector\RequestDataCollector::onKernelResponse()` * Added `Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector` * Deprecated service `serializer.mapping.cache.apc` (use `serializer.mapping.cache.doctrine.apc` instead) diff --git a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php index 1547d1e3f0ed6..f124147df967c 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php @@ -16,6 +16,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; +use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\FilterControllerEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -128,20 +129,23 @@ public function collect(Request $request, Response $response, \Exception $except unset($this->controllers[$request]); } - if ($request->hasSession() && $request->getSession()->has('sf_redirect')) { - $this->data['redirect'] = $request->getSession()->get('sf_redirect'); - $request->getSession()->remove('sf_redirect'); - } + if (isset($session)) { + if ($session->has('sf_redirected')) { + $this->data['redirect'] = $session->get('sf_redirect'); + $session->remove('sf_redirect'); + $session->remove('sf_redirected'); + } - if ($request->hasSession() && $response->isRedirect()) { - $request->getSession()->set('sf_redirect', array( - 'token' => $response->headers->get('x-debug-token'), - 'route' => $request->attributes->get('_route', 'n/a'), - 'method' => $request->getMethod(), - 'controller' => $this->parseController($request->attributes->get('_controller')), - 'status_code' => $statusCode, - 'status_text' => Response::$statusTexts[(int) $statusCode], - )); + if ($response->isRedirect()) { + $session->set('sf_redirect', array( + 'token' => $response->headers->get('x-debug-token'), + 'route' => $request->attributes->get('_route', 'n/a'), + 'method' => $request->getMethod(), + 'controller' => $this->parseController($request->attributes->get('_controller')), + 'status_code' => $statusCode, + 'status_text' => Response::$statusTexts[(int) $statusCode], + )); + } } } @@ -286,9 +290,23 @@ public function onKernelController(FilterControllerEvent $event) $this->controllers[$event->getRequest()] = $event->getController(); } + public function onKernelResponse(FilterResponseEvent $event) + { + if (!$event->isMasterRequest() || !$event->getRequest()->hasSession()) { + return; + } + + if ($event->getRequest()->getSession()->has('sf_redirect')) { + $event->getRequest()->getSession()->set('sf_redirected', true); + } + } + public static function getSubscribedEvents() { - return array(KernelEvents::CONTROLLER => 'onKernelController'); + return array( + KernelEvents::CONTROLLER => 'onKernelController', + KernelEvents::RESPONSE => 'onKernelResponse', + ); } /** From df19c14050608baa2d015520cae2f811acd7b76c Mon Sep 17 00:00:00 2001 From: Jules Pietri Date: Sat, 23 Apr 2016 03:01:41 +0200 Subject: [PATCH 3/3] use a request attribute flag for redirection profile --- .../HttpKernel/DataCollector/RequestDataCollector.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php index f124147df967c..741da73734b7b 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php @@ -130,10 +130,8 @@ public function collect(Request $request, Response $response, \Exception $except } if (isset($session)) { - if ($session->has('sf_redirected')) { - $this->data['redirect'] = $session->get('sf_redirect'); - $session->remove('sf_redirect'); - $session->remove('sf_redirected'); + if ($request->attributes->has('_redirected')) { + $this->data['redirect'] = $session->remove('sf_redirect'); } if ($response->isRedirect()) { @@ -297,7 +295,7 @@ public function onKernelResponse(FilterResponseEvent $event) } if ($event->getRequest()->getSession()->has('sf_redirect')) { - $event->getRequest()->getSession()->set('sf_redirected', true); + $event->getRequest()->attributes->set('_redirected', true); } }