RuleName.php
3.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace think\route;
class RuleName
{
protected $item = [];
protected $rule = [];
/**
* 注册路由标识
* @access public
* @param string $name 路由标识
* @param array $value 路由规则
* @param bool $first 是否置顶
* @return void
*/
public function set($name, $value, $first = false)
{
if ($first && isset($this->item[$name])) {
array_unshift($this->item[$name], $value);
} else {
$this->item[$name][] = $value;
}
}
/**
* 注册路由规则
* @access public
* @param string $rule 路由规则
* @param RuleItem $route 路由
* @return void
*/
public function setRule($rule, $route)
{
$this->rule[$route->getDomain()][$rule][$route->getRoute()] = $route;
}
/**
* 根据路由规则获取路由对象(列表)
* @access public
* @param string $name 路由标识
* @param string $domain 域名
* @return array
*/
public function getRule($rule, $domain = null)
{
return isset($this->rule[$domain][$rule]) ? $this->rule[$domain][$rule] : [];
}
/**
* 获取全部路由列表
* @access public
* @param string $domain 域名
* @return array
*/
public function getRuleList($domain = null)
{
$list = [];
foreach ($this->rule as $ruleDomain => $rules) {
foreach ($rules as $rule => $items) {
foreach ($items as $item) {
$val = [];
foreach (['method', 'rule', 'name', 'route', 'pattern', 'option'] as $param) {
$call = 'get' . $param;
$val[$param] = $item->$call();
}
$list[$ruleDomain][] = $val;
}
}
}
if ($domain) {
return isset($list[$domain]) ? $list[$domain] : [];
}
return $list;
}
/**
* 导入路由标识
* @access public
* @param array $name 路由标识
* @return void
*/
public function import($item)
{
$this->item = $item;
}
/**
* 根据路由标识获取路由信息(用于URL生成)
* @access public
* @param string $name 路由标识
* @param string $domain 域名
* @return array|null
*/
public function get($name = null, $domain = null)
{
if (is_null($name)) {
return $this->item;
}
$name = strtolower($name);
if (isset($this->item[$name])) {
if (is_null($domain)) {
$result = $this->item[$name];
} else {
$result = [];
foreach ($this->item[$name] as $item) {
if ($item[2] == $domain) {
$result[] = $item;
}
}
}
} else {
$result = null;
}
return $result;
}
}