| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | 
							- <?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;
 
- use think\Route;
 
- class Resource extends RuleGroup
 
- {
 
-     // 资源路由名称
 
-     protected $resource;
 
-     // REST路由方法定义
 
-     protected $rest = [];
 
-     /**
 
-      * 架构函数
 
-      * @access public
 
-      * @param  Route         $router     路由对象
 
-      * @param  RuleGroup     $parent     上级对象
 
-      * @param  string        $name       资源名称
 
-      * @param  string        $route      路由地址
 
-      * @param  array         $option     路由参数
 
-      * @param  array         $pattern    变量规则
 
-      * @param  array         $rest       资源定义
 
-      */
 
-     public function __construct(Route $router, RuleGroup $parent = null, $name = '', $route = '', $option = [], $pattern = [], $rest = [])
 
-     {
 
-         $this->router   = $router;
 
-         $this->parent   = $parent;
 
-         $this->resource = $name;
 
-         $this->route    = $route;
 
-         $this->name     = strpos($name, '.') ? strstr($name, '.', true) : $name;
 
-         $this->setFullName();
 
-         // 资源路由默认为完整匹配
 
-         $option['complete_match'] = true;
 
-         $this->pattern = $pattern;
 
-         $this->option  = $option;
 
-         $this->rest    = $rest;
 
-         if ($this->parent) {
 
-             $this->domain = $this->parent->getDomain();
 
-             $this->parent->addRuleItem($this);
 
-         }
 
-         if ($router->isTest()) {
 
-             $this->buildResourceRule();
 
-         }
 
-     }
 
-     /**
 
-      * 生成资源路由规则
 
-      * @access protected
 
-      * @return void
 
-      */
 
-     protected function buildResourceRule()
 
-     {
 
-         $origin = $this->router->getGroup();
 
-         $this->router->setGroup($this);
 
-         $rule   = $this->resource;
 
-         $option = $this->option;
 
-         if (strpos($rule, '.')) {
 
-             // 注册嵌套资源路由
 
-             $array = explode('.', $rule);
 
-             $last  = array_pop($array);
 
-             $item  = [];
 
-             foreach ($array as $val) {
 
-                 $item[] = $val . '/<' . (isset($option['var'][$val]) ? $option['var'][$val] : $val . '_id') . '>';
 
-             }
 
-             $rule = implode('/', $item) . '/' . $last;
 
-         }
 
-         $prefix = substr($rule, strlen($this->name) + 1);
 
-         // 注册资源路由
 
-         foreach ($this->rest as $key => $val) {
 
-             if ((isset($option['only']) && !in_array($key, $option['only']))
 
-                 || (isset($option['except']) && in_array($key, $option['except']))) {
 
-                 continue;
 
-             }
 
-             if (isset($last) && strpos($val[1], '<id>') && isset($option['var'][$last])) {
 
-                 $val[1] = str_replace('<id>', '<' . $option['var'][$last] . '>', $val[1]);
 
-             } elseif (strpos($val[1], '<id>') && isset($option['var'][$rule])) {
 
-                 $val[1] = str_replace('<id>', '<' . $option['var'][$rule] . '>', $val[1]);
 
-             }
 
-             $this->addRule(trim($prefix . $val[1], '/'), $this->route . '/' . $val[2], $val[0]);
 
-         }
 
-         $this->router->setGroup($origin);
 
-     }
 
-     /**
 
-      * rest方法定义和修改
 
-      * @access public
 
-      * @param  string        $name 方法名称
 
-      * @param  array|bool    $resource 资源
 
-      * @return $this
 
-      */
 
-     public function rest($name, $resource = [])
 
-     {
 
-         if (is_array($name)) {
 
-             $this->rest = $resource ? $name : array_merge($this->rest, $name);
 
-         } else {
 
-             $this->rest[$name] = $resource;
 
-         }
 
-         return $this;
 
-     }
 
- }
 
 
  |