Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\HttpKernel\DataCollector; Chris@0: Chris@17: use Symfony\Component\HttpFoundation\RedirectResponse; Chris@0: use Symfony\Component\HttpFoundation\Request; Chris@0: use Symfony\Component\HttpFoundation\Response; Chris@0: use Symfony\Component\HttpKernel\Event\FilterControllerEvent; Chris@0: Chris@0: /** Chris@0: * RouterDataCollector. Chris@0: * Chris@0: * @author Fabien Potencier Chris@0: */ Chris@0: class RouterDataCollector extends DataCollector Chris@0: { Chris@14: /** Chris@14: * @var \SplObjectStorage Chris@14: */ Chris@0: protected $controllers; Chris@0: Chris@0: public function __construct() Chris@0: { Chris@14: $this->reset(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function collect(Request $request, Response $response, \Exception $exception = null) Chris@0: { Chris@0: if ($response instanceof RedirectResponse) { Chris@0: $this->data['redirect'] = true; Chris@0: $this->data['url'] = $response->getTargetUrl(); Chris@0: Chris@0: if ($this->controllers->contains($request)) { Chris@0: $this->data['route'] = $this->guessRoute($request, $this->controllers[$request]); Chris@0: } Chris@0: } Chris@0: Chris@0: unset($this->controllers[$request]); Chris@0: } Chris@0: Chris@14: public function reset() Chris@14: { Chris@14: $this->controllers = new \SplObjectStorage(); Chris@14: Chris@17: $this->data = [ Chris@14: 'redirect' => false, Chris@14: 'url' => null, Chris@14: 'route' => null, Chris@17: ]; Chris@14: } Chris@14: Chris@0: protected function guessRoute(Request $request, $controller) Chris@0: { Chris@0: return 'n/a'; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Remembers the controller associated to each request. Chris@0: */ Chris@0: public function onKernelController(FilterControllerEvent $event) Chris@0: { Chris@0: $this->controllers[$event->getRequest()] = $event->getController(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Whether this request will result in a redirect Chris@0: */ Chris@0: public function getRedirect() Chris@0: { Chris@0: return $this->data['redirect']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return string|null The target URL Chris@0: */ Chris@0: public function getTargetUrl() Chris@0: { Chris@0: return $this->data['url']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return string|null The target route Chris@0: */ Chris@0: public function getTargetRoute() Chris@0: { Chris@0: return $this->data['route']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getName() Chris@0: { Chris@0: return 'router'; Chris@0: } Chris@0: }