fix bug in router parameter parsing.

This commit is contained in:
Taylor Otwell 2012-01-12 11:04:02 -06:00
parent 339d3a8407
commit c47a30fca6
1 changed files with 4 additions and 34 deletions

View File

@ -157,9 +157,11 @@ protected function match($destination, $keys, $callback)
{
foreach (explode(', ', $keys) as $key)
{
if (preg_match('#^'.$this->wildcards($key).'$#', $destination))
if (preg_match('#^'.$this->wildcards($key).'$#', $destination, $parameters))
{
return new Route($keys, $callback, $this->parameters($destination, $key));
array_shift($parameters);
return new Route($keys, $callback, $parameters);
}
}
}
@ -253,36 +255,4 @@ protected function wildcards($key)
return str_replace(array_keys($this->patterns), array_values($this->patterns), $key);
}
/**
* Extract the parameters from a URI based on a route URI.
*
* Any route segment wrapped in parentheses is considered a parameter.
*
* @param string $uri
* @param string $route
* @return array
*/
protected function parameters($uri, $route)
{
list($uri, $route) = array(explode('/', $uri), explode('/', $route));
$count = count($route);
$parameters = array();
// To find the parameters that should be passed to the route, we will
// iterate through the route segments, and if the segment is enclosed
// in parentheses, we will take the matching segment from the request
// URI and add it to the array of parameters.
for ($i = 0; $i < $count; $i++)
{
if (preg_match('/\(.+\)/', $route[$i]) and isset($uri[$i]))
{
$parameters[] = $uri[$i];
}
}
return $parameters;
}
}