39 lines
1021 B
PHP
39 lines
1021 B
PHP
<?php
|
|
|
|
class Router {
|
|
|
|
private $routes = [];
|
|
|
|
public function add() {
|
|
$this->routes[$pattern] = $callback;
|
|
}
|
|
|
|
public function dispatch($url) {
|
|
// remove variables from url
|
|
$url = strtok($url, '?');
|
|
|
|
foreach ($this->routes as $pattern => $callback) {
|
|
if (preg_match('#^' . $pattern . '$#', $url, $matches)) {
|
|
// move any exact match
|
|
array_shift($matches);
|
|
return $this->invoke($callback, $matches);
|
|
}
|
|
}
|
|
|
|
// if there was no match at all, return 404
|
|
http_response_code(404);
|
|
echo '404 page not found';
|
|
}
|
|
|
|
private function invoke($callback, $params) {
|
|
list($controllerName, $methodName) = explode('@', $callback);
|
|
// $controllerClass = "\\App\\Controllers\\$controllerName";
|
|
$controllerClass = "../pages/$pageName";
|
|
$controller = new $controllerClass();
|
|
call_user_func_array([$controller, $methodName], $params);
|
|
}
|
|
|
|
}
|
|
|
|
?>
|