改进自动路由标识生成 支持不同的路由规则 指向同一个路由标识,改进Url自动生成对路由标识的支持

This commit is contained in:
thinkphp
2016-08-23 18:03:31 +08:00
parent 0885e14f24
commit 369bbc9d99
3 changed files with 13 additions and 12 deletions

View File

@@ -301,7 +301,7 @@ class Route
} }
$vars = self::parseVar($rule); $vars = self::parseVar($rule);
if (isset($name)) { if (isset($name)) {
self::$name[$name] = [$rule, $vars, self::$domain]; self::$name[$name][] = [$rule, $vars, self::$domain];
} }
if ($group) { if ($group) {
if ('*' != $type) { if ('*' != $type) {

View File

@@ -234,18 +234,19 @@ class Url
// 匹配路由地址 // 匹配路由地址
public static function getRuleUrl($rule, &$vars = []) public static function getRuleUrl($rule, &$vars = [])
{ {
list($url, $pattern) = $rule; foreach ($rule as $item) {
foreach ($pattern as $key => $val) { list($url, $pattern) = $item;
if (isset($vars[$key])) { foreach ($pattern as $key => $val) {
$url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key . '', '<' . $key . '>'], $vars[$key], $url); if (isset($vars[$key])) {
unset($vars[$key]); $url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key . '', '<' . $key . '>'], $vars[$key], $url);
} elseif (2 == $val) { unset($vars[$key]);
$url = str_replace(['/[:' . $key . ']', '[:' . $key . ']', '<' . $key . '?>'], '', $url); return $url;
} else { } elseif (2 == $val) {
return false; return str_replace(['/[:' . $key . ']', '[:' . $key . ']', '<' . $key . '?>'], '', $url);
}
} }
} }
return $url; return false;
} }
// 指定当前生成URL地址的root // 指定当前生成URL地址的root

View File

@@ -56,7 +56,7 @@ class urlTest extends \PHPUnit_Framework_TestCase
public function testBuildMethod() public function testBuildMethod()
{ {
Route::get('blog/:id', ['\app\index\controller\blog', 'read']); Route::get('blog/:id', '\app\index\controller\blog@read');
$this->assertEquals('/blog/10.html', Url::build('\app\index\controller\blog\read', 'id=10', 'html')); $this->assertEquals('/blog/10.html', Url::build('\app\index\controller\blog\read', 'id=10', 'html'));
} }