]> git.mxchange.org Git - friendica.git/blob - src/App/Router.php
7753b6bbb9277be4a12229510b071ae1ac9384e0
[friendica.git] / src / App / Router.php
1 <?php\r
2 \r
3 namespace Friendica\App;\r
4 \r
5 \r
6 use FastRoute\DataGenerator\GroupCountBased;\r
7 use FastRoute\Dispatcher;\r
8 use FastRoute\RouteCollector;\r
9 use FastRoute\RouteParser\Std;\r
10 \r
11 /**\r
12  * Wrapper for FastRoute\Router\r
13  *\r
14  * This wrapper only makes use of a subset of the router features, mainly parses a route rule to return the relevant\r
15  * module class.\r
16  *\r
17  * Actual routes are defined in App->collectRoutes.\r
18  *\r
19  * @package Friendica\App\r
20  */\r
21 class Router\r
22 {\r
23         /** @var RouteCollector */\r
24         protected $routeCollector;\r
25 \r
26         public function __construct(RouteCollector $routeCollector = null)\r
27         {\r
28                 if (!$routeCollector) {\r
29                         $routeCollector = new RouteCollector(new Std(), new GroupCountBased());\r
30                 }\r
31 \r
32                 $this->routeCollector = $routeCollector;\r
33         }\r
34 \r
35         public function getRouteCollector()\r
36         {\r
37                 return $this->routeCollector;\r
38         }\r
39 \r
40         public function getModuleClass($cmd)\r
41         {\r
42                 $cmd = '/' . ltrim($cmd, '/');\r
43 \r
44                 $dispatcher = new \FastRoute\Dispatcher\GroupCountBased($this->routeCollector->getData());\r
45 \r
46                 $moduleClass = null;\r
47 \r
48                 // @TODO: Enable method-specific modules\r
49                 $httpMethod = 'GET';\r
50                 $routeInfo = $dispatcher->dispatch($httpMethod, $cmd);\r
51                 if ($routeInfo[0] === Dispatcher::FOUND) {\r
52                         $moduleClass = $routeInfo[1];\r
53                 }\r
54 \r
55                 return $moduleClass;\r
56         }\r
57 }\r