Commit a946a863 by Qiang Xue

fixed parseUrl.

parent f31369e7
......@@ -77,9 +77,9 @@ class UrlRule extends Object
$length = strlen($match[0][0]);
$offset = $match[0][1];
if ($this->pattern[$offset - 1] === '/' && $this->pattern[$offset + $length] === '/') {
$tr["<$name>"] = "(?P<$name>(?:/$pattern)?)";
$tr["/<$name>"] = "(/(?P<$name>$pattern))?";
} else {
$tr["<$name>"] = "(?P<$name>(?:$pattern)?)";
$tr["<$name>"] = "(?P<$name>$pattern)?";
}
} else {
$tr["<$name>"] = "(?P<$name>$pattern)";
......@@ -93,7 +93,7 @@ class UrlRule extends Object
}
$this->template = preg_replace('/<(\w+):?([^>]+)?>/', '<$1>', $this->pattern);
$this->pattern = '#^' . strtr($this->template, $tr) . '$#u';
$this->pattern = '#^' . trim(strtr($this->template, $tr), '/') . '$#u';
if ($this->routeParams !== array()) {
$this->routeRule = '#^' . strtr($this->route, $tr2) . '$#u';
......@@ -102,7 +102,26 @@ class UrlRule extends Object
public function parseUrl($pathInfo)
{
if (!preg_match($this->pattern, $pathInfo, $matches)) {
return false;
}
$params = $this->defaults;
$tr = array();
foreach ($matches as $name => $value) {
if ($value !== '') {
if (isset($this->routeParams[$name])) {
$tr[$this->routeParams[$name]] = $value;
} elseif (isset($this->paramRules[$name])) {
$params[$name] = $value;
}
}
}
if ($this->routeRule !== null) {
$route = strtr($this->route, $tr);
} else {
$route = $this->route;
}
return array($route, $params);
}
public function createUrl($route, $params)
......@@ -115,7 +134,6 @@ class UrlRule extends Object
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];
}
......@@ -137,7 +155,6 @@ class UrlRule extends Object
unset($params[$name]);
if (isset($this->paramRules[$name])) {
$tr["<$name>"] = '';
$tr["/<$name>/"] = '/';
}
} elseif (!isset($this->paramRules[$name])) {
return false;
......@@ -163,11 +180,4 @@ class UrlRule extends Object
}
return $url;
}
public function parse($pathInfo)
{
$route = '';
$params = array();
return array($route, $params);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment