1: <?php
2:
3: namespace InfoContact\IcFwk\Router;
4:
5: class Router {
6:
7: /** @var array $routes Liste des routes de l'application */
8: static private $routes = [];
9: const NO_ROUTE = 1;
10:
11: /**
12: * Ajoute une route dans la liste des routes
13: * @param \InfoContact\IcFwk\Router\Route $route La route à ajouté
14: * @return void
15: */
16: static public function addRoute(\InfoContact\IcFwk\Router\Route $route) {
17: if(!in_array($route, self::$routes)) {
18: $this->routes[] = $route;
19: }
20: }
21:
22: /**
23: * Retourne la route correspondant à l'URL passée en paramètre
24: * @param string $url L'URL dont on souhaite connaitre la route correspondante
25: * @return \InfoContact\IcFwk\Router\Route L'ojet route correspondant
26: * @throws \RuntimeException
27: */
28: static public function getRoute($url) {
29: /* @var $route \InfoContact\IcFwk\Router\Route */
30: foreach ($this->routes as $route) {
31: if(($varsValues = $route->match($url)) !== false) {
32: $route->setVars($varsValues);
33: return $route;
34: }
35: }
36: throw new \RuntimeException('Aucune route ne correspond à l\'URL', self::NO_ROUTE);
37: }
38:
39: /**
40: * Génère l'URL de la route dont les nom et les paramètres sont transmis
41: * @param string $name Nom de la route
42: * @param array $params Paramètre de la route
43: * @return string URL générée
44: * @throws \RuntimeException
45: */
46: static public function generate($name, $params = []) {
47: /* @var $route \InfoContact\IcFwk\Router\Route */
48: foreach ($this->routes as $route) {
49: if($name == $route->getName()) {
50: return $route->generateUrl($params);
51: }
52: }
53: throw new \RuntimeException('Aucune route ne correspond à l\'URL', self::NO_ROUTE);
54: }
55:
56: }
57: