ywtc_api/thinkphp/library/think/route/RuleName.php

148 lines
3.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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 = [];
}
}