refactoring the router.

This commit is contained in:
Taylor Otwell 2012-01-27 08:47:12 -06:00
parent 54e0bef6b5
commit 7aecd7857f
2 changed files with 22 additions and 4 deletions

View File

@ -219,6 +219,17 @@ function array_strip_slashes($array)
return $result;
}
/**
* Divide an array into two arrays. One with keys and the other with values.
*
* @param array $array
* @return array
*/
function array_divide($array)
{
return array(array_keys($array), array_values($array));
}
/**
* Determine if "Magic Quotes" are enabled on the server.
*

View File

@ -167,7 +167,9 @@ public static function route($method, $uri)
$uri = ltrim($uri, '/');
}
return static::controller($bundle, $method, $destination, Str::segments($uri));
$segments = Str::segments($uri);
return static::controller($bundle, $method, $destination, $segments);
}
/**
@ -285,21 +287,26 @@ protected static function controller_key($segments, $directory)
}
/**
* Translate route URI wildcards into actual regular expressions.
* Translate route URI wildcards into regular expressions.
*
* @param string $key
* @return string
*/
protected static function wildcards($key)
{
list($search, $replace) = array_divide(static::$optional);
// For optional parameters, first translate the wildcards to their
// regex equivalent, sans the ")?" ending. We'll add the endings
// back on after we know how many replacements we made.
$key = str_replace(array_keys(static::$optional), array_values(static::$optional), $key, $count);
$key = str_replace($search, $replace, $key, $count);
$key .= ($count > 0) ? str_repeat(')?', $count) : '';
return str_replace(array_keys(static::$patterns), array_values(static::$patterns), $key);
// For "regular" parameters, we can just do a simple translate
// using the patterns array. There is not need to cap the
// pattern like we did with optional parameters.
return strtr($key, static::$patterns);
}
}