thinkphp-wechat/thinkphp/library/think/route/RuleName.php
Wenbin.Wang d49c9fde59 代码
2021-12-24 16:40:05 +08:00

148 lines
3.9 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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->getMethod()] = $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['domain'] = $ruleDomain;
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, $method = '*')
{
if (is_null($name)) {
return $this->item;
}
$name = strtolower($name);
$method = strtolower($method);
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 && ('*' == $item[4] || $method == $item[4])) {
$result[] = $item;
}
}
}
} else {
$result = null;
}
return $result;
}
/**
* 清空路由规则
* @access public
* @return void
*/
public function clear()
{
$this->item = [];
$this->rule = [];
}
}