Browse Source

url wip

tags/2.0.0-beta
Qiang Xue 12 years ago
parent
commit
f31369e7c1
  1. 12
      framework/web/UrlRule.php
  2. 3
      tests/unit/framework/web/UrlRuleTest.php

12
framework/web/UrlRule.php

@ -112,8 +112,13 @@ class UrlRule extends Object
// match the route part first // match the route part first
if ($route !== $this->route) { if ($route !== $this->route) {
if ($this->routeRule !== null && preg_match($this->routeRule, $route, $matches)) { if ($this->routeRule !== null && preg_match($this->routeRule, $route, $matches)) {
foreach ($this->routeParams as $key => $name) { foreach ($this->routeParams as $name => $token) {
$tr[$name] = $matches[$key]; if (isset($this->defaults[$name]) && strcmp($this->defaults[$name], $matches[$name]) === 0) {
$tr[$token] = '';
$tr["/$token/"] = '/';
} else {
$tr[$token] = $matches[$name];
}
} }
} else { } else {
return false; return false;
@ -123,6 +128,9 @@ class UrlRule extends Object
// match default params // match default params
// if a default param is not in the route pattern, its value must also be matched // if a default param is not in the route pattern, its value must also be matched
foreach ($this->defaults as $name => $value) { foreach ($this->defaults as $name => $value) {
if (isset($this->routeParams[$name])) {
continue;
}
if (!isset($params[$name])) { if (!isset($params[$name])) {
return false; return false;
} elseif (strcmp($params[$name], $value) === 0) { // strcmp will do string conversion automatically } elseif (strcmp($params[$name], $value) === 0) { // strcmp will do string conversion automatically

3
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'), array('post/index', array('controller' => 'comment'), 'post/index?controller=comment'),
), ),
), ),
/* this is not supported
array( array(
'route has default parameter', 'route has default parameter',
array( array(
@ -256,10 +255,10 @@ class UrlRuleTest extends \yiiunit\TestCase
array('post/view', array('page' => 1), 'post/view?page=1'), array('post/view', array('page' => 1), 'post/view?page=1'),
array('comment/view', array('page' => 1), 'comment/view?page=1'), array('comment/view', array('page' => 1), 'comment/view?page=1'),
array('test/view', array('page' => 1), false), array('test/view', array('page' => 1), false),
array('test/index', array('page' => 1), false),
array('post/index', array('page' => 1), 'post?page=1'), array('post/index', array('page' => 1), 'post?page=1'),
), ),
), ),
*/
); );
} }

Loading…
Cancel
Save