-
Notifications
You must be signed in to change notification settings - Fork 0
/
router.class.php
46 lines (35 loc) · 1.03 KB
/
router.class.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
44
45
46
<?php
// Based on https://github.com/JREAM/route/blob/master/route.php which no longer exists.
// Small improvements.
class Router
{
private static $routes = array();
// Defines a new route. $function is called with arguments specified in the path.
public static function addRoute($path, $function)
{
self::$routes[$path] = $function;
}
// Calls the function defined by the route found for $request. Returns true for success or false if a route isn't found.
public static function route($request = '/')
{
$uri = !empty($request) ? $request : '/';
if ($uri != '/' && substr($uri, -1) != '/')
$uri .= '/';
$uri = preg_replace('/\\?(.*)/', '', $uri);
foreach(self::$routes as $path => $func)
{
if (preg_match("#^{$path}$#", $uri))
{
$uriParts = explode('/', $uri);
$routeParts = explode('/', $path);
$values = array();
foreach($routeParts as $k => $part)
if ($part == '.+')
$values[] = $uriParts[$k];
call_user_func_array($func, $values);
return true;
}
}
return false;
}
}