Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\HttpKernel\DataCollector;
|
Chris@0
|
13
|
Chris@0
|
14 use Symfony\Component\HttpFoundation\Request;
|
Chris@0
|
15 use Symfony\Component\HttpFoundation\Response;
|
Chris@0
|
16 use Symfony\Component\HttpFoundation\RedirectResponse;
|
Chris@0
|
17 use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * RouterDataCollector.
|
Chris@0
|
21 *
|
Chris@0
|
22 * @author Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
23 */
|
Chris@0
|
24 class RouterDataCollector extends DataCollector
|
Chris@0
|
25 {
|
Chris@0
|
26 protected $controllers;
|
Chris@0
|
27
|
Chris@0
|
28 public function __construct()
|
Chris@0
|
29 {
|
Chris@0
|
30 $this->controllers = new \SplObjectStorage();
|
Chris@0
|
31
|
Chris@0
|
32 $this->data = array(
|
Chris@0
|
33 'redirect' => false,
|
Chris@0
|
34 'url' => null,
|
Chris@0
|
35 'route' => null,
|
Chris@0
|
36 );
|
Chris@0
|
37 }
|
Chris@0
|
38
|
Chris@0
|
39 /**
|
Chris@0
|
40 * {@inheritdoc}
|
Chris@0
|
41 */
|
Chris@0
|
42 public function collect(Request $request, Response $response, \Exception $exception = null)
|
Chris@0
|
43 {
|
Chris@0
|
44 if ($response instanceof RedirectResponse) {
|
Chris@0
|
45 $this->data['redirect'] = true;
|
Chris@0
|
46 $this->data['url'] = $response->getTargetUrl();
|
Chris@0
|
47
|
Chris@0
|
48 if ($this->controllers->contains($request)) {
|
Chris@0
|
49 $this->data['route'] = $this->guessRoute($request, $this->controllers[$request]);
|
Chris@0
|
50 }
|
Chris@0
|
51 }
|
Chris@0
|
52
|
Chris@0
|
53 unset($this->controllers[$request]);
|
Chris@0
|
54 }
|
Chris@0
|
55
|
Chris@0
|
56 protected function guessRoute(Request $request, $controller)
|
Chris@0
|
57 {
|
Chris@0
|
58 return 'n/a';
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 /**
|
Chris@0
|
62 * Remembers the controller associated to each request.
|
Chris@0
|
63 *
|
Chris@0
|
64 * @param FilterControllerEvent $event The filter controller event
|
Chris@0
|
65 */
|
Chris@0
|
66 public function onKernelController(FilterControllerEvent $event)
|
Chris@0
|
67 {
|
Chris@0
|
68 $this->controllers[$event->getRequest()] = $event->getController();
|
Chris@0
|
69 }
|
Chris@0
|
70
|
Chris@0
|
71 /**
|
Chris@0
|
72 * @return bool Whether this request will result in a redirect
|
Chris@0
|
73 */
|
Chris@0
|
74 public function getRedirect()
|
Chris@0
|
75 {
|
Chris@0
|
76 return $this->data['redirect'];
|
Chris@0
|
77 }
|
Chris@0
|
78
|
Chris@0
|
79 /**
|
Chris@0
|
80 * @return string|null The target URL
|
Chris@0
|
81 */
|
Chris@0
|
82 public function getTargetUrl()
|
Chris@0
|
83 {
|
Chris@0
|
84 return $this->data['url'];
|
Chris@0
|
85 }
|
Chris@0
|
86
|
Chris@0
|
87 /**
|
Chris@0
|
88 * @return string|null The target route
|
Chris@0
|
89 */
|
Chris@0
|
90 public function getTargetRoute()
|
Chris@0
|
91 {
|
Chris@0
|
92 return $this->data['route'];
|
Chris@0
|
93 }
|
Chris@0
|
94
|
Chris@0
|
95 /**
|
Chris@0
|
96 * {@inheritdoc}
|
Chris@0
|
97 */
|
Chris@0
|
98 public function getName()
|
Chris@0
|
99 {
|
Chris@0
|
100 return 'router';
|
Chris@0
|
101 }
|
Chris@0
|
102 }
|