4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\HttpKernel\DataCollector;
14 use Symfony\Component\HttpFoundation\Request;
15 use Symfony\Component\HttpFoundation\Response;
16 use Symfony\Component\HttpFoundation\RedirectResponse;
17 use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
20 * RouterDataCollector.
22 * @author Fabien Potencier <fabien@symfony.com>
24 class RouterDataCollector extends DataCollector
26 protected $controllers;
28 public function __construct()
30 $this->controllers = new \SplObjectStorage();
42 public function collect(Request $request, Response $response, \Exception $exception = null)
44 if ($response instanceof RedirectResponse) {
45 $this->data['redirect'] = true;
46 $this->data['url'] = $response->getTargetUrl();
48 if ($this->controllers->contains($request)) {
49 $this->data['route'] = $this->guessRoute($request, $this->controllers[$request]);
53 unset($this->controllers[$request]);
56 protected function guessRoute(Request $request, $controller)
62 * Remembers the controller associated to each request.
64 * @param FilterControllerEvent $event The filter controller event
66 public function onKernelController(FilterControllerEvent $event)
68 $this->controllers[$event->getRequest()] = $event->getController();
72 * @return bool Whether this request will result in a redirect
74 public function getRedirect()
76 return $this->data['redirect'];
80 * @return string|null The target URL
82 public function getTargetUrl()
84 return $this->data['url'];
88 * @return string|null The target route
90 public function getTargetRoute()
92 return $this->data['route'];
98 public function getName()