/** * Inspired * @param $requestURL * @param $requestMethod * @return bool|Route */ public function match($requestURL, $requestMethod) { foreach ($this->routeCollection->getAll() as $route) { // compare methods if (!in_array($requestMethod, $route->getMethods())) { continue; // doesn't match request method } // strip subdirectory $currentDir = dirname($_SERVER['SCRIPT_NAME']); if ($currentDir != '/') { $requestURL = str_replace($currentDir, '', $requestURL); } if (!preg_match('@^' . $this->basePath . $route->getRegex() . '@i', $requestURL, $matches)) { continue; // doesn't match url } $params = []; if (preg_match_all('/:([\\w-%]+)/', $route->getUrl(), $argumentKeys)) { $argumentKeys = $argumentKeys[1]; foreach ($argumentKeys as $key => $name) { if (isset($matches[$key + 1])) { $params[$name] = $matches[$key + 1]; } } } $route->setParameters($params); return $route; } return false; }