diff options
author | Thomas Lange <code@nerdmind.de> | 2017-03-10 21:46:12 +0100 |
---|---|---|
committer | Thomas Lange <code@nerdmind.de> | 2017-03-10 21:46:12 +0100 |
commit | e33c245d910e55b8cab407a03e669470509a705d (patch) | |
tree | e958504564ab47e72e0d3dcfe0b967440007b1d9 /core/namespace/Router.php | |
parent | aae885b9784466ab412e4010893808867e93c213 (diff) | |
download | blog-3340cb97dbee1b7ba14d941bcc0552dc5c87078e.tar.gz blog-3340cb97dbee1b7ba14d941bcc0552dc5c87078e.tar.xz blog-3340cb97dbee1b7ba14d941bcc0552dc5c87078e.zip |
Several changes have been made in this commit, which together with the previous commits result in version 1.1:v1.1
+ The rules for the Apache and nginx configuration have been changed and redirects now all requests to the index.php.
+ A router class has been added which now handles all requests that arrives at the application on the index.php.
+ Short-hand functions "PAGE", "POST" and "USER" for use in templates added to get specific item data by ID.
+ More language variables have been added to the core language.
Diffstat (limited to 'core/namespace/Router.php')
-rw-r--r-- | core/namespace/Router.php | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/core/namespace/Router.php b/core/namespace/Router.php new file mode 100644 index 0000000..22784c2 --- /dev/null +++ b/core/namespace/Router.php @@ -0,0 +1,64 @@ +<?php +class Router { + private static $routes = []; + + #=============================================================================== + # Add route + #=============================================================================== + public static function add($pattern, callable $callback) { + $pattern = Application::get('PATHINFO.BASE').$pattern; + + return self::$routes[] = [ + 'type' => 'route', + 'pattern' => $pattern, + 'callback' => $callback + ]; + } + + #=============================================================================== + # Add redirect + #=============================================================================== + public static function addRedirect($pattern, $location, $code = 302) { + $pattern = Application::get('PATHINFO.BASE').$pattern; + + return self::$routes[] = [ + 'type' => 'redirect', + 'code' => $code, + 'pattern' => $pattern, + 'location' => $location + ]; + } + + #=============================================================================== + # Execute routing + #=============================================================================== + public static function execute($path) { + $path = ltrim($path, '/'); + $route_found = FALSE; + + foreach(self::$routes as $route) { + if($route['type'] === 'redirect') { + $location = preg_replace("#^{$route['pattern']}$#", $route['location'], $path, -1, $count); + + if($count) { + HTTP::redirect($location, $route['code']); + } + } + + else { + if(preg_match("#^{$route['pattern']}$#", $path, $matches)) { + # Remove the first element from matches which contains the whole string. + array_shift($matches); + + $route_found = TRUE; + call_user_func_array($route['callback'], $matches); + } + } + } + + if($route_found === FALSE) { + require_once 'system/404.php'; + } + } +} +?>
\ No newline at end of file |