src/SnooPHP/Http/Router.php
protected function match(Request $request)
	{
		foreach ($this->routes as $route)
		{
			if ($route->method() === $request->method() && $route->match($request->url()))
			{
				if ($action = $route->action())
				{
					try
					{
						$response = $action($request, $route->args());
						if ($response !== false) return $response;
					}
					catch (AbortRouteException $abort)
					{
						return $abort->response();
					}
				}
				else
					// Match found but no action to perform
					return null;
			}
		}

		// No match found
		return false;
	}
protected function match(Request $request)
	{
		foreach ($this->routes as $route)
		{
			if ($route->method() === $request->method() && $route->match($request->url()))
			{
				if ($action = $route->action())
				{
					try
					{
						$response = $action($request, $route->args());
						if ($response !== false) return $response;
					}
					catch (AbortRouteException $abort)
					{
						return $abort->response();
					}
				}
				else
					// Match found but no action to perform
					return null;
			}
		}

		// No match found
		return false;
	}
Return response of first route that matches, false otherwise

If a route action returns false, following routes have a chance at matching
After the first match the function returns. In case of possible multiple matches
the route declared first is taken as valid (too expensive to check match length).
Pay attention to "greedy" routes (with + or *) can shadow other routes.

@param Request $request request to test

@return Response|bool