|
16 | 16 | use Symfony\Component\HttpFoundation\Request;
|
17 | 17 | use Symfony\Component\HttpFoundation\Response;
|
18 | 18 | use Symfony\Component\HttpFoundation\ResponseHeaderBag;
|
| 19 | +use Symfony\Component\HttpKernel\Event\FilterResponseEvent; |
19 | 20 | use Symfony\Component\HttpKernel\KernelEvents;
|
20 | 21 | use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
|
21 | 22 | use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
@@ -128,20 +129,23 @@ public function collect(Request $request, Response $response, \Exception $except
|
128 | 129 | unset($this->controllers[$request]);
|
129 | 130 | }
|
130 | 131 |
|
131 |
| - if ($request->hasSession() && $request->getSession()->has('sf_redirect')) { |
132 |
| - $this->data['redirect'] = $request->getSession()->get('sf_redirect'); |
133 |
| - $request->getSession()->remove('sf_redirect'); |
134 |
| - } |
| 132 | + if (isset($session)) { |
| 133 | + if ($session->has('sf_redirected')) { |
| 134 | + $this->data['redirect'] = $session->get('sf_redirect'); |
| 135 | + $session->remove('sf_redirect'); |
| 136 | + $session->remove('sf_redirected'); |
| 137 | + } |
135 | 138 |
|
136 |
| - if ($request->hasSession() && $response->isRedirect()) { |
137 |
| - $request->getSession()->set('sf_redirect', array( |
138 |
| - 'token' => $response->headers->get('x-debug-token'), |
139 |
| - 'route' => $request->attributes->get('_route', 'n/a'), |
140 |
| - 'method' => $request->getMethod(), |
141 |
| - 'controller' => $this->parseController($request->attributes->get('_controller')), |
142 |
| - 'status_code' => $statusCode, |
143 |
| - 'status_text' => Response::$statusTexts[(int) $statusCode], |
144 |
| - )); |
| 139 | + if ($response->isRedirect()) { |
| 140 | + $session->set('sf_redirect', array( |
| 141 | + 'token' => $response->headers->get('x-debug-token'), |
| 142 | + 'route' => $request->attributes->get('_route', 'n/a'), |
| 143 | + 'method' => $request->getMethod(), |
| 144 | + 'controller' => $this->parseController($request->attributes->get('_controller')), |
| 145 | + 'status_code' => $statusCode, |
| 146 | + 'status_text' => Response::$statusTexts[(int) $statusCode], |
| 147 | + )); |
| 148 | + } |
145 | 149 | }
|
146 | 150 | }
|
147 | 151 |
|
@@ -286,9 +290,23 @@ public function onKernelController(FilterControllerEvent $event)
|
286 | 290 | $this->controllers[$event->getRequest()] = $event->getController();
|
287 | 291 | }
|
288 | 292 |
|
| 293 | + public function onKernelResponse(FilterResponseEvent $event) |
| 294 | + { |
| 295 | + if (!$event->isMasterRequest() || !$event->getRequest()->hasSession()) { |
| 296 | + return; |
| 297 | + } |
| 298 | + |
| 299 | + if ($event->getRequest()->getSession()->has('sf_redirect')) { |
| 300 | + $event->getRequest()->getSession()->set('sf_redirected', true); |
| 301 | + } |
| 302 | + } |
| 303 | + |
289 | 304 | public static function getSubscribedEvents()
|
290 | 305 | {
|
291 |
| - return array(KernelEvents::CONTROLLER => 'onKernelController'); |
| 306 | + return array( |
| 307 | + KernelEvents::CONTROLLER => 'onKernelController', |
| 308 | + KernelEvents::RESPONSE => 'onKernelResponse', |
| 309 | + ); |
292 | 310 | }
|
293 | 311 |
|
294 | 312 | /**
|
|
0 commit comments