-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRouter.class.php
More file actions
executable file
·75 lines (70 loc) · 2.18 KB
/
Router.class.php
File metadata and controls
executable file
·75 lines (70 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
require_once("Clients.class.php");
require_once("Response.class.php");
/**
* Class Router
*
* Calls appropriate methods for content.
*/
class Router{
public static $routes = array();
/**
* @param $httpMethod
* @param $path
* @param $controller
* @param $action
* Adds route to collection.
*/
public static function addRoute($httpMethod, $path, $controller, $action){
static::$routes[] = array(
'httpMethod' => $httpMethod,
'path' => $path,
'controller' => $controller,
'action' => $action
);
}
/**
* Executes the asked route.
* @param $httpMethod
* @param $path
*
*/
public static function doRoute($httpMethod, $path){
$request = explode("/", strtok($path, '?'));
array_shift($request);
$requestSettings = Router::validateUrl($request);
foreach(Router::$routes as $route){
if(preg_match("/(".$requestSettings['preg'].")$/", $route['path']) && !empty($requestSettings['preg'])){
if($httpMethod == $route['httpMethod'] ){
$params = call_user_func_array( array( new $route['controller'], $route['action']), $requestSettings['params'] );
$response = new Response($params['code'], $params['message'], $params['type'], $params['data']);
$response->send();
break;
}else{
$response = new Response(405, 'Bad method.', 'application/json', '');
}
}else{
$response = new Response(404, 'Page not found.' , 'application/json', '');
}
}
$response->send();
}
/**
* @param $request
* @return string
* Builds Regex depending on URL
*/
private static function validateUrl($request){
$grepStr = "";
$params = array();
foreach($request as $param){
if(is_numeric($param)){
array_push($params, $param);
$grepStr .= "\{\w+\}"."\/";
}else{
$grepStr .= $param."\/";
}
}
return array('preg' => substr($grepStr,0,-2), 'params' => $params);
}
}