X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FApp%2FRouter.php;h=6ae42bb14191d30f372dbe87115f3ef828940f9d;hb=1bc4b2e0788ac11d3b377013b410f2250fff68aa;hp=f723321ac67cf883bfe8a2ab93c26c5e77c78b7c;hpb=f8c0f24e34e124ab782d5dcf3d2d658d70e19e5c;p=friendica.git diff --git a/src/App/Router.php b/src/App/Router.php index f723321ac6..6ae42bb141 100644 --- a/src/App/Router.php +++ b/src/App/Router.php @@ -8,7 +8,7 @@ use FastRoute\Dispatcher; use FastRoute\RouteCollector; use FastRoute\RouteParser\Std; use Friendica\Core\Hook; -use Friendica\Core\L10n; +use Friendica\DI; use Friendica\Network\HTTPException; /** @@ -39,6 +39,11 @@ class Router */ private $httpMethod; + /** + * @var array Module parameters + */ + private $parameters = []; + /** * @param array $server The $_SERVER variable * @param RouteCollector|null $routeCollector Optional the loaded Route collector @@ -60,12 +65,21 @@ class Router * * @throws HTTPException\InternalServerErrorException In case of invalid configs */ - public function addRoutes(array $routes) + public function loadRoutes(array $routes) { $routeCollector = (isset($this->routeCollector) ? $this->routeCollector : new RouteCollector(new Std(), new GroupCountBased())); + $this->addRoutes($routeCollector, $routes); + + $this->routeCollector = $routeCollector; + + return $this; + } + + private function addRoutes(RouteCollector $routeCollector, array $routes) + { foreach ($routes as $route => $config) { if ($this->isGroup($config)) { $this->addGroup($route, $config, $routeCollector); @@ -75,10 +89,6 @@ class Router throw new HTTPException\InternalServerErrorException("Wrong route config for route '" . print_r($route, true) . "'"); } } - - $this->routeCollector = $routeCollector; - - return $this; } /** @@ -91,15 +101,7 @@ class Router private function addGroup(string $groupRoute, array $routes, RouteCollector $routeCollector) { $routeCollector->addGroup($groupRoute, function (RouteCollector $routeCollector) use ($routes) { - foreach ($routes as $route => $config) { - if ($this->isGroup($config)) { - $this->addGroup($route, $config, $routeCollector); - } elseif ($this->isRoute($config)) { - $routeCollector->addRoute($config[1], $route, $config[0]); - }else { - throw new HTTPException\InternalServerErrorException("Wrong route config for route '" . print_r($route, true) . "'"); - } - } + $this->addRoutes($routeCollector, $routes); }); } @@ -169,19 +171,31 @@ class Router $cmd = '/' . ltrim($cmd, '/'); - $dispatcher = new \FastRoute\Dispatcher\GroupCountBased($this->routeCollector->getData()); + $dispatcher = new Dispatcher\GroupCountBased($this->routeCollector->getData()); $moduleClass = null; + $this->parameters = []; $routeInfo = $dispatcher->dispatch($this->httpMethod, $cmd); if ($routeInfo[0] === Dispatcher::FOUND) { $moduleClass = $routeInfo[1]; + $this->parameters = $routeInfo[2]; } elseif ($routeInfo[0] === Dispatcher::METHOD_NOT_ALLOWED) { - throw new HTTPException\MethodNotAllowedException(L10n::t('Method not allowed for this module. Allowed method(s): %s', implode(', ', $routeInfo[1]))); + throw new HTTPException\MethodNotAllowedException(DI::l10n()->t('Method not allowed for this module. Allowed method(s): %s', implode(', ', $routeInfo[1]))); } else { - throw new HTTPException\NotFoundException(L10n::t('Page not found.')); + throw new HTTPException\NotFoundException(DI::l10n()->t('Page not found.')); } return $moduleClass; } + + /** + * Returns the module parameters. + * + * @return array parameters + */ + public function getModuleParameters() + { + return $this->parameters; + } }