Completed
Push — master ( 1fdf8c...1603d3 )
by Jean-Christophe
02:05
created

Router::addRouteToRoutes()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 8
rs 9.4285
cc 2
eloc 6
nc 2
nop 6
1
<?php
2
namespace micro\controllers;
3
use micro\cache\CacheManager;
4
use micro\utils\RequestUtils;
5
use micro\cache\ControllerParser;
6
7
class Router {
8
	private static $routes;
9
10
	public static function start(){
11
		self::$routes=CacheManager::getControllerCache();
12
	}
13
14
	public static function getRoute($path){
15
		$path="/".$path;
16
		foreach (self::$routes as $routePath=>$routeDetails){
17
			if (preg_match("@^".$routePath."$@s",$path,$matches)){
18
				if(!isset($routeDetails["controller"])){
19
					$method=RequestUtils::getMethod();
20
					if(isset($routeDetails[$method]))
21
						return self::getRouteUrlParts(["path"=>$routePath,"details"=>$routeDetails[$method]],$matches);
22
				}else
23
					return self::getRouteUrlParts(["path"=>$routePath,"details"=>$routeDetails],$matches);
24
			}
25
		}
26
		return false;
27
	}
28
29
	public static function getRouteUrlParts($routeArray,$params){
30
		$params=array_slice($params, 1);
31
		$result=[$routeArray["details"]["controller"],$routeArray["details"]["action"]];
32
		$paramsOrder=$routeArray["details"]["parameters"];
33
		foreach ($paramsOrder as $order){
34
			$result[]=$params[$order];
35
		}
36
		return $result;
37
	}
38
39
	public static function addRoute($path,$controller,$action="index",$methods=null,$name=""){
40
		self::addRouteToRoutes(self::$routes, $path, $controller,$action,$methods,$name);
41
	}
42
43
	public static function addRouteToRoutes(&$routesArray,$path,$controller,$action="index",$methods=null,$name=""){
44
		$result=[];
45
		$method=new \ReflectionMethod($controller,$action);
46
		ControllerParser::parseRouteArray($result, $controller, ["path"=>$path,"methods"=>$methods,"name"=>$name], $method, $action);
47
		foreach ($result as $k=>$v){
48
			$routesArray[$k]=$v;
49
		}
50
	}
51
}
52