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