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 = array();
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: parent::__construct('RoutingPanel', array($this, 'renderTab'), array($this, 'renderPanel'));
44: }
45:
46:
47:
48: 49: 50: 51:
52: public function renderTab()
53: {
54: $this->analyse($this->router);
55: require __DIR__ . '/templates/RoutingPanel.tab.phtml';
56: }
57:
58:
59:
60: 61: 62: 63:
64: public function renderPanel()
65: {
66: require __DIR__ . '/templates/RoutingPanel.panel.phtml';
67: }
68:
69:
70:
71: 72: 73: 74: 75:
76: private function analyse($router)
77: {
78: if ($router instanceof MultiRouter) {
79: foreach ($router as $subRouter) {
80: $this->analyse($subRouter);
81: }
82: return;
83: }
84:
85: $request = $router->match($this->httpRequest);
86: $matched = $request === NULL ? 'no' : 'may';
87: if ($request !== NULL && empty($this->request)) {
88: $this->request = $request;
89: $matched = 'yes';
90: }
91:
92: $this->routers[] = array(
93: 'matched' => $matched,
94: 'class' => get_class($router),
95: 'defaults' => $router instanceof Route || $router instanceof SimpleRouter ? $router->getDefaults() : array(),
96: 'mask' => $router instanceof Route ? $router->getMask() : NULL,
97: 'request' => $request,
98: );
99: }
100:
101: }
102: