-
Notifications
You must be signed in to change notification settings - Fork 2
/
router.php
43 lines (40 loc) · 1.1 KB
/
router.php
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
<?php
class Router {
private $routes = array();
private $route_vars;
public $view = null;
public $public = null;
public $vars = array();
public function add_route($path, $view, $public) {
$this->route_vars = array();
$path = preg_replace_callback('|\\\{([a-z]+)\\\}|', array($this, 'parse_route_variable'), preg_quote($path, '|'));
$route = new StdClass;
$route->view = $view;
$route->vars = $this->route_vars;
$route->public = $public;
$this->routes[$path] = $route;
}
private function parse_route_variable($matches) {
$this->route_vars[] = $matches[1];
return '([^/]*)';
}
public function handle_request($request_path) {
$request_path = preg_replace('|\?.*$|', '', $request_path);
foreach($this->routes as $path => $route) {
if(preg_match('|^'.$path.'$|', $request_path, $matches)) {
$this->view = $route->view;
$this->public = $route->public;
$i = 0;
foreach($route->vars as $var) {
$i++;
if(isset($matches[$i])) {
$this->vars[$var] = urldecode($matches[$i]);
}
}
}
}
if(is_null($this->view)) {
$this->view = 'error404';
}
}
}