| | |
| | | |
| | | |
| | | } |
| | | public function match (string $path,): array|bool { |
| | | public function match (string $path): array|bool { |
| | | $path = urldecode($path); |
| | | |
| | | $pattern = "#^/home/index$#"; |
| | | $path = trim($path, "/"); |
| | | |
| | | if(preg_match($pattern, $path)) { |
| | | exit("Match"); |
| | | } |
| | | |
| | | foreach ($this->routes as $route) { |
| | | if ($route["path"] === $path) { |
| | | return $route["params"]; |
| | | |
| | | $pattern = $this->getPatternFromRoutePath($route["path"]); |
| | | |
| | | if(preg_match($pattern, $path, $matches)) { |
| | | $matches = array_filter($matches, "is_string", ARRAY_FILTER_USE_KEY); |
| | | |
| | | $params = array_merge($matches, $route["params"]); |
| | | |
| | | return $params; |
| | | } |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | private function getPatternFromRoutePath(string $route_path): string { |
| | | $route_path = trim("$route_path", "/"); |
| | | |
| | | $segments = explode("/", $route_path); |
| | | |
| | | $segments = array_map(function(string $segment) :string { |
| | | |
| | | if(preg_match("#^\{([a-z][a-z0-9]*)\}$#", $segment, $matches)) { |
| | | return "(?<" . $matches[1] . ">[^/]*)"; |
| | | } |
| | | if(preg_match("#^\{([a-z][a-z0-9]*):(.+)\}$#", $segment, $matches)) { |
| | | return "(?<" . $matches[1] . ">". $matches[2] ."[^/]*)"; |
| | | } |
| | | return $segment; |
| | | }, $segments); |
| | | |
| | | return "#^" . implode("/", $segments) . "$#iu"; |
| | | } |
| | | } |