/** * Iterate through every route to find a matching route. * * @param string $path Optional path to match against * @return Route */ public function run($path = null) { $method = r::method(); $ajax = r::ajax(); $https = r::ssl(); $routes = a::get($this->routes, $method, array()); // detect path if not set manually if ($path === null) { $path = implode('/', (array) url::fragments(detect::path())); } // empty urls should never happen if (empty($path)) { $path = '/'; } foreach ($routes as $route) { if ($route->https and !$https) { continue; } if ($route->ajax and !$ajax) { continue; } // handle exact matches if ($route->pattern == $path) { $this->route = $route; break; } // We only need to check routes with regular expression since all others // would have been able to be matched by the search for literal matches // we just did before we started searching. if (strpos($route->pattern, '(') === false) { continue; } $preg = '#^' . $this->wildcards($route->pattern) . '$#u'; // If we get a match we'll return the route and slice off the first // parameter match, as preg_match sets the first array item to the // full-text match of the pattern. if (preg_match($preg, $path, $parameters)) { $this->route = $route; $this->route->arguments = array_slice($parameters, 1); break; } } if ($this->route and $this->filterer($this->route->filter) !== false) { return $this->route; } else { return null; } }
public function testSsl() { $this->assertFalse(r::ssl()); $this->assertFalse(r::secure()); }