mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 07:12:47 +08:00
Route类增加name方法 支持给路由定义命名表示 用于快速生成URL地址
This commit is contained in:
@@ -61,6 +61,8 @@ class Route
|
|||||||
private static $bind = [];
|
private static $bind = [];
|
||||||
// 当前分组信息
|
// 当前分组信息
|
||||||
private static $group = [];
|
private static $group = [];
|
||||||
|
// 路由命名标识(用于快速URL生成)
|
||||||
|
private static $name = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册变量规则
|
* 注册变量规则
|
||||||
@@ -106,6 +108,21 @@ class Route
|
|||||||
self::$bind = ['type' => $type, $type => $bind];
|
self::$bind = ['type' => $type, $type => $bind];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置路由绑定
|
||||||
|
* @access public
|
||||||
|
* @param string $name 路由命名标识
|
||||||
|
* @return string|array
|
||||||
|
*/
|
||||||
|
public static function name($name = '')
|
||||||
|
{
|
||||||
|
if ('' === $name) {
|
||||||
|
return self::$name;
|
||||||
|
} else {
|
||||||
|
return isset(self::$name[$name]) ? self::$name[$name] : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 读取路由绑定
|
* 读取路由绑定
|
||||||
* @access public
|
* @access public
|
||||||
@@ -195,7 +212,7 @@ class Route
|
|||||||
$option['method'] = $type;
|
$option['method'] = $type;
|
||||||
$type = '*';
|
$type = '*';
|
||||||
}
|
}
|
||||||
if (is_array($rule)) {
|
if (is_array($rule) && empty($route)) {
|
||||||
foreach ($rule as $key => $val) {
|
foreach ($rule as $key => $val) {
|
||||||
if (is_numeric($key)) {
|
if (is_numeric($key)) {
|
||||||
$key = array_shift($val);
|
$key = array_shift($val);
|
||||||
@@ -228,6 +245,9 @@ 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)) {
|
||||||
|
list($name, $rule) = $rule;
|
||||||
|
}
|
||||||
if ('$' == substr($rule, -1, 1)) {
|
if ('$' == substr($rule, -1, 1)) {
|
||||||
// 是否完整匹配
|
// 是否完整匹配
|
||||||
$option['complete_match'] = true;
|
$option['complete_match'] = true;
|
||||||
@@ -237,6 +257,9 @@ class Route
|
|||||||
$rule = trim($rule, '/');
|
$rule = trim($rule, '/');
|
||||||
}
|
}
|
||||||
$vars = self::parseVar($rule);
|
$vars = self::parseVar($rule);
|
||||||
|
if (isset($name)) {
|
||||||
|
self::$name[$name] = [$rule, $vars];
|
||||||
|
}
|
||||||
if ($group) {
|
if ($group) {
|
||||||
self::$rules[$type][$group]['rule'][] = ['rule' => $rule, 'route' => $route, 'var' => $vars, 'option' => $option, 'pattern' => $pattern];
|
self::$rules[$type][$group]['rule'][] = ['rule' => $rule, 'route' => $route, 'var' => $vars, 'option' => $option, 'pattern' => $pattern];
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -69,15 +69,21 @@ class Url
|
|||||||
$vars = array_merge($params, $vars);
|
$vars = array_merge($params, $vars);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取路由别名
|
$rule = Route::name($url);
|
||||||
$alias = self::getRouteAlias();
|
if ($rule && $match = self::getRuleUrl($rule, $vars)) {
|
||||||
// 检测路由
|
// 匹配路由命名标识 快速生成
|
||||||
if (0 !== strpos($url, '/') && isset($alias[$url]) && $match = self::getRouteUrl($alias[$url], $vars)) {
|
$url = $match;
|
||||||
// 处理路由规则中的特殊字符
|
|
||||||
$url = str_replace('[--think--]', '', $match);
|
|
||||||
} else {
|
} else {
|
||||||
// 路由不存在 直接解析
|
// 获取路由别名
|
||||||
$url = self::parseUrl($url);
|
$alias = self::getRouteAlias();
|
||||||
|
// 检测路由
|
||||||
|
if (0 !== strpos($url, '/') && isset($alias[$url]) && $match = self::getRouteUrl($alias[$url], $vars)) {
|
||||||
|
// 处理路由规则中的特殊字符
|
||||||
|
$url = $match;
|
||||||
|
} else {
|
||||||
|
// 路由不存在 直接解析
|
||||||
|
$url = self::parseUrl($url);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检测URL绑定
|
// 检测URL绑定
|
||||||
@@ -225,10 +231,6 @@ class Url
|
|||||||
{
|
{
|
||||||
foreach ($alias as $key => $val) {
|
foreach ($alias as $key => $val) {
|
||||||
list($url, $pattern, $param) = $val;
|
list($url, $pattern, $param) = $val;
|
||||||
// 解析安全替换
|
|
||||||
if (strpos($url, '$')) {
|
|
||||||
$url = str_replace('$', '[--think--]', $url);
|
|
||||||
}
|
|
||||||
// 检查变量匹配
|
// 检查变量匹配
|
||||||
$array = $vars;
|
$array = $vars;
|
||||||
$match = false;
|
$match = false;
|
||||||
@@ -257,6 +259,23 @@ class Url
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 匹配路由地址
|
||||||
|
public static function getRuleUrl($rule, &$vars = [])
|
||||||
|
{
|
||||||
|
list($url, $pattern) = $rule;
|
||||||
|
foreach ($pattern as $key => $val) {
|
||||||
|
if (isset($vars[$key])) {
|
||||||
|
$url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key . '', '<' . $key . '>'], $vars[$key], $url);
|
||||||
|
unset($vars[$key]);
|
||||||
|
} elseif (2 == $val) {
|
||||||
|
$url = str_replace(['[:' . $key . ']', '<' . $key . '?>'], '', $url);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
|
||||||
// 生成路由映射并缓存
|
// 生成路由映射并缓存
|
||||||
private static function getRouteAlias()
|
private static function getRouteAlias()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user