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