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