Uses cookies to track the requests redirection

This commit is contained in:
Samuel ROZE 2018-01-08 16:06:02 +00:00
parent f95ac4f809
commit 83f257943f
No known key found for this signature in database
GPG Key ID: 835426F55A19FB84

View File

@ -11,6 +11,7 @@
namespace Symfony\Component\HttpKernel\DataCollector; namespace Symfony\Component\HttpKernel\DataCollector;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@ -128,22 +129,25 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
unset($this->controllers[$request]); unset($this->controllers[$request]);
} }
if (null !== $session) { if ($request->attributes->has('_redirected') && $redirectCookie = $request->cookies->get('sf_redirect')) {
if ($request->attributes->has('_redirected')) { $this->data['redirect'] = json_decode($redirectCookie, true);
$this->data['redirect'] = $session->remove('sf_redirect');
$response->headers->clearCookie('sf_redirect');
} }
if ($response->isRedirect()) { if ($response->isRedirect()) {
$session->set('sf_redirect', array( $response->headers->setCookie(new Cookie(
'sf_redirect',
json_encode(array(
'token' => $response->headers->get('x-debug-token'), 'token' => $response->headers->get('x-debug-token'),
'route' => $request->attributes->get('_route', 'n/a'), 'route' => $request->attributes->get('_route', 'n/a'),
'method' => $request->getMethod(), 'method' => $request->getMethod(),
'controller' => $this->parseController($request->attributes->get('_controller')), 'controller' => $this->parseController($request->attributes->get('_controller')),
'status_code' => $statusCode, 'status_code' => $statusCode,
'status_text' => Response::$statusTexts[(int) $statusCode], 'status_text' => Response::$statusTexts[(int) $statusCode],
))
)); ));
} }
}
$this->data['identifier'] = $this->data['route'] ?: (is_array($this->data['controller']) ? $this->data['controller']['class'].'::'.$this->data['controller']['method'].'()' : $this->data['controller']); $this->data['identifier'] = $this->data['route'] ?: (is_array($this->data['controller']) ? $this->data['controller']['class'].'::'.$this->data['controller']['method'].'()' : $this->data['controller']);
} }
@ -312,11 +316,11 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
public function onKernelResponse(FilterResponseEvent $event) public function onKernelResponse(FilterResponseEvent $event)
{ {
if (!$event->isMasterRequest() || !$event->getRequest()->hasSession()) { if (!$event->isMasterRequest()) {
return; return;
} }
if ($event->getRequest()->getSession()->has('sf_redirect')) { if ($event->getRequest()->cookies->has('sf_redirect')) {
$event->getRequest()->attributes->set('_redirected', true); $event->getRequest()->attributes->set('_redirected', true);
} }
} }