1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12: namespace Nette\Application;
13:
14: use Nette;
15:
16:
17:
18: 19: 20: 21: 22:
23: class RoutingDebugger extends Nette\DebugPanel
24: {
25:
26: private $router;
27:
28:
29: private $httpRequest;
30:
31:
32: private $routers;
33:
34:
35: private $request;
36:
37:
38:
39: public function __construct(IRouter $router, Nette\Web\IHttpRequest $httpRequest)
40: {
41: $this->router = $router;
42: $this->httpRequest = $httpRequest;
43: $this->routers = new \ArrayObject;
44: parent::__construct('RoutingDebugger', array($this, 'renderTab'), array($this, 'renderPanel'));
45: }
46:
47:
48:
49: 50: 51: 52:
53: public function renderTab()
54: {
55: $this->analyse($this->router);
56: require __DIR__ . '/templates/RoutingDebugger.tab.phtml';
57: }
58:
59:
60:
61: 62: 63: 64:
65: public function renderPanel()
66: {
67: require __DIR__ . '/templates/RoutingDebugger.panel.phtml';
68: }
69:
70:
71:
72: 73: 74: 75: 76:
77: private function analyse($router)
78: {
79: if ($router instanceof MultiRouter) {
80: foreach ($router as $subRouter) {
81: $this->analyse($subRouter);
82: }
83: return;
84: }
85:
86: $request = $router->match($this->httpRequest);
87: $matched = $request === NULL ? 'no' : 'may';
88: if ($request !== NULL && empty($this->request)) {
89: $this->request = $request;
90: $matched = 'yes';
91: }
92:
93: $this->routers[] = array(
94: 'matched' => $matched,
95: 'class' => get_class($router),
96: 'defaults' => $router instanceof Route || $router instanceof SimpleRouter ? $router->getDefaults() : array(),
97: 'mask' => $router instanceof Route ? $router->getMask() : NULL,
98: 'request' => $request,
99: );
100: }
101:
102: }
103: