内核更新

This commit is contained in:
2016-08-01 17:42:27 +08:00
parent d8c6d0b3b8
commit d502c92c32
3 changed files with 20 additions and 19 deletions

View File

@@ -58,4 +58,5 @@ return [
'tag error' => '模板标签错误', 'tag error' => '模板标签错误',
'cache write error' => '缓存写入失败', 'cache write error' => '缓存写入失败',
'sae mc write error' => 'SAE mc 写入错误', 'sae mc write error' => 'SAE mc 写入错误',
'route name not exists' => '路由命名标识不存在',
]; ];

View File

@@ -257,7 +257,8 @@ class Route
protected static function setRule($rule, $route, $type = '*', $option = [], $pattern = [], $group = '') protected static function setRule($rule, $route, $type = '*', $option = [], $pattern = [], $group = '')
{ {
if (is_array($rule)) { if (is_array($rule)) {
list($name, $rule) = $rule; $name = $rule[0];
$rule = $rule[1];
} }
if ('$' == substr($rule, -1, 1)) { if ('$' == substr($rule, -1, 1)) {
// 是否完整匹配 // 是否完整匹配
@@ -334,11 +335,11 @@ class Route
} }
if (!empty($name)) { if (!empty($name)) {
// 分组 // 分组
$currentGroup = self::getGroup('name');
if ($currentGroup) {
$name = $currentGroup . '/' . ltrim($name, '/');
}
if ($routes instanceof \Closure) { if ($routes instanceof \Closure) {
$currentGroup = self::getGroup('name');
if ($currentGroup) {
$name = $currentGroup . '/' . ltrim($name, '/');
}
$currentOption = self::getGroup('option'); $currentOption = self::getGroup('option');
$currentPattern = self::getGroup('pattern'); $currentPattern = self::getGroup('pattern');
self::setGroup($name, $option, $pattern); self::setGroup($name, $option, $pattern);
@@ -348,7 +349,6 @@ class Route
self::$rules['*'][$name]['var'] = self::parseVar($name); self::$rules['*'][$name]['var'] = self::parseVar($name);
self::$rules['*'][$name]['option'] = $option; self::$rules['*'][$name]['option'] = $option;
self::$rules['*'][$name]['pattern'] = $pattern; self::$rules['*'][$name]['pattern'] = $pattern;
} else { } else {
foreach ($routes as $key => $val) { foreach ($routes as $key => $val) {
if (is_numeric($key)) { if (is_numeric($key)) {
@@ -381,6 +381,9 @@ class Route
$currentGroup = self::getGroup('name'); $currentGroup = self::getGroup('name');
$currentOption = self::getGroup('option'); $currentOption = self::getGroup('option');
$currentPattern = self::getGroup('pattern'); $currentPattern = self::getGroup('pattern');
if ($currentGroup) {
$name = $currentGroup . '/' . ltrim($name, '/');
}
self::setGroup($name, $option, $pattern); self::setGroup($name, $option, $pattern);
call_user_func_array($routes, []); call_user_func_array($routes, []);
self::setGroup($currentGroup, $currentOption, $currentPattern); self::setGroup($currentGroup, $currentOption, $currentPattern);

View File

@@ -19,9 +19,6 @@ use think\Route;
class Url class Url
{ {
// 生成URL地址的root
protected static $root;
/** /**
* URL生成 支持路由反射 * URL生成 支持路由反射
* @param string $url URL表达式 * @param string $url URL表达式
@@ -39,6 +36,11 @@ class Url
$domain = true; $domain = true;
} }
// 解析URL // 解析URL
if (0 === strpos($url, '[') && $pos = strpos($url, ']')) {
// [name] 表示使用路由命名标识生成URL
$name = substr($url, 1, $pos - 1);
$url = 'name' . substr($url, $pos + 1);
}
$info = parse_url($url); $info = parse_url($url);
$url = !empty($info['path']) ? $info['path'] : ''; $url = !empty($info['path']) ? $info['path'] : '';
if (isset($info['fragment'])) { if (isset($info['fragment'])) {
@@ -69,10 +71,12 @@ class Url
$vars = array_merge($params, $vars); $vars = array_merge($params, $vars);
} }
$rule = Route::name($url); $rule = Route::name(isset($name) ? $name : $url);
if ($rule && $match = self::getRuleUrl($rule, $vars)) { if ($rule && $match = self::getRuleUrl($rule, $vars)) {
// 匹配路由命名标识 快速生成 // 匹配路由命名标识 快速生成
$url = $match; $url = $match;
} elseif ($rule && isset($name)) {
throw new \InvalidArgumentException('route name not exists:' . $name);
} else { } else {
// 获取路由别名 // 获取路由别名
$alias = self::getRouteAlias(); $alias = self::getRouteAlias();
@@ -122,7 +126,7 @@ class Url
// 检测域名 // 检测域名
$domain = self::parseDomain($url, $domain); $domain = self::parseDomain($url, $domain);
// URL组装 // URL组装
$url = $domain . (self::$root ?: Request::instance()->root()) . '/' . ltrim($url, '/'); $url = $domain . Request::instance()->root() . '/' . ltrim($url, '/');
return $url; return $url;
} }
@@ -338,11 +342,4 @@ class Url
{ {
Cache::rm('think_route_map'); Cache::rm('think_route_map');
} }
}
// 指定当前生成URL地址的root
public static function root($root)
{
self::$root = $root;
Request::instance()->root($root);
}
}