|
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,33 +129,22 @@ 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 |
| - } |
135 |
| - |
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 |
| - )); |
145 |
| - } |
| 132 | + if (isset($session)) { |
| 133 | + if ($request->attributes->has('_redirected')) { |
| 134 | + $this->data['redirect'] = $session->remove('sf_redirect'); |
| 135 | + } |
146 | 136 |
|
147 |
| - if ($parentRequestAttributes = $request->attributes->get('_forwarded')) { |
148 |
| - if ($parentRequestAttributes instanceof ParameterBag) { |
149 |
| - $parentRequestAttributes->set('_forward_token', $response->headers->get('x-debug-token')); |
| 137 | + if ($response->isRedirect()) { |
| 138 | + $session->set('sf_redirect', array( |
| 139 | + 'token' => $response->headers->get('x-debug-token'), |
| 140 | + 'route' => $request->attributes->get('_route', 'n/a'), |
| 141 | + 'method' => $request->getMethod(), |
| 142 | + 'controller' => $this->parseController($request->attributes->get('_controller')), |
| 143 | + 'status_code' => $statusCode, |
| 144 | + 'status_text' => Response::$statusTexts[(int) $statusCode], |
| 145 | + )); |
150 | 146 | }
|
151 | 147 | }
|
152 |
| - if ($request->attributes->has('_forward_controller')) { |
153 |
| - $this->data['forward'] = array( |
154 |
| - 'token' => $request->attributes->get('_forward_token'), |
155 |
| - 'controller' => $this->parseController($request->attributes->get('_forward_controller')), |
156 |
| - ); |
157 |
| - } |
158 | 148 | }
|
159 | 149 |
|
160 | 150 | public function getMethod()
|
@@ -298,9 +288,23 @@ public function onKernelController(FilterControllerEvent $event)
|
298 | 288 | $this->controllers[$event->getRequest()] = $event->getController();
|
299 | 289 | }
|
300 | 290 |
|
| 291 | + public function onKernelResponse(FilterResponseEvent $event) |
| 292 | + { |
| 293 | + if (!$event->isMasterRequest() || !$event->getRequest()->hasSession()) { |
| 294 | + return; |
| 295 | + } |
| 296 | + |
| 297 | + if ($event->getRequest()->getSession()->has('sf_redirect')) { |
| 298 | + $event->getRequest()->attributes->set('_redirected', true); |
| 299 | + } |
| 300 | + } |
| 301 | + |
301 | 302 | public static function getSubscribedEvents()
|
302 | 303 | {
|
303 |
| - return array(KernelEvents::CONTROLLER => 'onKernelController'); |
| 304 | + return array( |
| 305 | + KernelEvents::CONTROLLER => 'onKernelController', |
| 306 | + KernelEvents::RESPONSE => 'onKernelResponse', |
| 307 | + ); |
304 | 308 | }
|
305 | 309 |
|
306 | 310 | /**
|
|
0 commit comments