From 61ad98a6e2914578cae32f249d2b496892c0f10b Mon Sep 17 00:00:00 2001 From: filippo.bertilotti <filippobertilotti@gmail.com> Date: Mon, 27 May 2024 10:44:00 +0200 Subject: [PATCH] aggiunto controllo sul metodo post in modo da non poter raggiungere la route destroy utilizzando il get (parte 144) --- src/Framework/router.php | 34 +++++++++++++++++++++++----------- 1 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/Framework/router.php b/src/Framework/router.php index ad3f6fa..e2f58e3 100644 --- a/src/Framework/router.php +++ b/src/Framework/router.php @@ -12,37 +12,49 @@ } - public function match (string $path,): array|bool { + public function match (string $path, string $method): array|bool { + $path = urldecode($path); + + $path = trim($path, "/"); foreach ($this->routes as $route) { - $pattern = "#^/(?<controller>[a-z]+)/(?<action>[a-z]+)$#"; - echo $pattern, "\n", $route["path"],"\n"; - - $this->getPatternFromRoutePath($route["path"]); + $pattern = $this->getPatternFromRoutePath($route["path"]); if(preg_match($pattern, $path, $matches)) { $matches = array_filter($matches, "is_string", ARRAY_FILTER_USE_KEY); - return $matches; + + $params = array_merge($matches, $route["params"]); + + if(array_key_exists("method", $params)) { + if(strtolower($method) !== strtolower($params["method"])) { + continue; + } + } + + return $params; } } return false; } - private function getPatternFromRoutePath(string $route_path) { + private function getPatternFromRoutePath(string $route_path): string { $route_path = trim("$route_path", "/"); $segments = explode("/", $route_path); $segments = array_map(function(string $segment) :string { - preg_match("#^\{([a-z][a-z0-9]*)\}$#", $segment, $matches); - $segment = "(?<" . $matches[1] . ">[a-z]+)"; - + 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); - print_r($segments); + return "#^" . implode("/", $segments) . "$#iu"; } } \ No newline at end of file -- Gitblit v1.8.0