diff --git a/framework/web/UrlRule.php b/framework/web/UrlRule.php index 2961275..457b735 100644 --- a/framework/web/UrlRule.php +++ b/framework/web/UrlRule.php @@ -112,8 +112,13 @@ class UrlRule extends Object // match the route part first if ($route !== $this->route) { if ($this->routeRule !== null && preg_match($this->routeRule, $route, $matches)) { - foreach ($this->routeParams as $key => $name) { - $tr[$name] = $matches[$key]; + foreach ($this->routeParams as $name => $token) { + if (isset($this->defaults[$name]) && strcmp($this->defaults[$name], $matches[$name]) === 0) { + $tr[$token] = ''; + $tr["/$token/"] = '/'; + } else { + $tr[$token] = $matches[$name]; + } } } else { return false; @@ -123,6 +128,9 @@ class UrlRule extends Object // match default params // if a default param is not in the route pattern, its value must also be matched foreach ($this->defaults as $name => $value) { + if (isset($this->routeParams[$name])) { + continue; + } if (!isset($params[$name])) { return false; } elseif (strcmp($params[$name], $value) === 0) { // strcmp will do string conversion automatically diff --git a/tests/unit/framework/web/UrlRuleTest.php b/tests/unit/framework/web/UrlRuleTest.php index a73e395..1467454 100644 --- a/tests/unit/framework/web/UrlRuleTest.php +++ b/tests/unit/framework/web/UrlRuleTest.php @@ -244,7 +244,6 @@ class UrlRuleTest extends \yiiunit\TestCase array('post/index', array('controller' => 'comment'), 'post/index?controller=comment'), ), ), - /* this is not supported array( 'route has default parameter', array( @@ -256,10 +255,10 @@ class UrlRuleTest extends \yiiunit\TestCase array('post/view', array('page' => 1), 'post/view?page=1'), array('comment/view', array('page' => 1), 'comment/view?page=1'), array('test/view', array('page' => 1), false), + array('test/index', array('page' => 1), false), array('post/index', array('page' => 1), 'post?page=1'), ), ), - */ ); }