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); | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | ?>
 |