rules() public static method

获取或者批量设置路由定义
public static rules ( mixed $rules = '' ) : array
$rules mixed 请求类型或者路由定义数组
return array
Esempio n. 1
0
 protected function buildRouteCache()
 {
     $files = \think\Config::get('route_config_file');
     foreach ($files as $file) {
         if (is_file(CONF_PATH . $file . CONF_EXT)) {
             $config = (include CONF_PATH . $file . CONF_EXT);
             if (is_array($config)) {
                 \think\Route::import($config);
             }
         }
     }
     $rules = \think\Route::rules(true);
     array_walk_recursive($rules, [$this, 'buildClosure']);
     $content = '<?php ' . PHP_EOL . 'return ';
     $content .= var_export($rules, true) . ';';
     $content = str_replace(['\'[__start__', '__end__]\''], '', stripcslashes($content));
     return $content;
 }
Esempio n. 2
0
 public function testDomain()
 {
     $request = Request::create('http://subdomain.thinkphp.cn');
     Route::domain('subdomain.thinkphp.cn', 'sub?abc=test&status=1');
     $rules = Route::rules('GET');
     Route::checkDomain($request, $rules);
     $this->assertEquals('sub', Route::getbind('module'));
     $this->assertEquals('test', $_GET['abc']);
     $this->assertEquals(1, $_GET['status']);
     Route::domain('subdomain.thinkphp.cn', '\\app\\index\\controller');
     $rules = Route::rules('GET');
     Route::checkDomain($request, $rules);
     $this->assertEquals('\\app\\index\\controller', Route::getbind('namespace'));
     Route::domain(['subdomain.thinkphp.cn' => '@\\app\\index\\controller\\blog']);
     $rules = Route::rules('GET');
     Route::checkDomain($request, $rules);
     $this->assertEquals('\\app\\index\\controller\\blog', Route::getbind('class'));
 }
Esempio n. 3
0
File: Url.php Progetto: GDdark/cici
 private static function getRouteAlias()
 {
     if ($item = Cache::get('think_route_map')) {
         return $item;
     }
     // 获取路由定义
     $array = Route::rules();
     foreach ($array as $type => $rules) {
         foreach ($rules as $rule => $val) {
             if (true === $val || empty($val['rule'])) {
                 continue;
             }
             $route = $val['route'];
             $vars = $val['var'];
             if (is_array($val['rule'])) {
                 foreach ($val['rule'] as $val) {
                     $key = $val['rule'];
                     $route = $val['route'];
                     $var = $val['var'];
                     $param = [];
                     if (is_array($route)) {
                         $route = implode('\\', $route);
                     } elseif ($route instanceof \Closure) {
                         continue;
                     } elseif (strpos($route, '?')) {
                         list($route, $str) = explode('?', $route, 2);
                         parse_str($str, $param);
                     }
                     $var = array_merge($vars, $var);
                     $item[$route][] = [$rule . '/' . $key, $var, $param];
                 }
             } else {
                 $param = [];
                 if (is_array($route)) {
                     $route = implode('\\', $route);
                 } elseif ($route instanceof \Closure) {
                     continue;
                 } elseif (strpos($route, '?')) {
                     list($route, $str) = explode('?', $route, 2);
                     parse_str($str, $param);
                 }
                 $item[$route][] = [$rule, $vars, $param];
             }
         }
     }
     // 检测路由别名
     $alias = Route::rules('alias');
     foreach ($alias as $rule => $route) {
         $route = is_array($route) ? $route[0] : $route;
         $item[$route][] = [$rule, [], []];
     }
     !App::$debug && Cache::set('think_route_map', $item);
     return $item;
 }
Esempio n. 4
0
 public function setUp()
 {
     Route::rules([]);
     Route::name([]);
 }
Esempio n. 5
0
File: Url.php Progetto: HXFY/think
 protected static function parseDomain(&$url, $domain)
 {
     if (!$domain) {
         return '';
     }
     $request = Request::instance();
     if (true === $domain) {
         // 自动判断域名
         $domain = $request->host();
         if (Config::get('url_domain_deploy')) {
             // 根域名
             $urlDomainRoot = Config::get('url_domain_root');
             $domains = Route::rules('domain');
             $route_domain = array_keys($domains);
             foreach ($route_domain as $domain_prefix) {
                 if (0 === strpos($domain_prefix, '*.') && strpos($domain, ltrim($domain_prefix, '*.')) !== false) {
                     foreach ($domains as $key => $rule) {
                         $rule = is_array($rule) ? $rule[0] : $rule;
                         if (is_string($rule) && false === strpos($key, '*') && 0 === strpos($url, $rule)) {
                             $url = ltrim($url, $rule);
                             $domain = $key;
                             // 生成对应子域名
                             if (!empty($urlDomainRoot)) {
                                 $domain .= $urlDomainRoot;
                             }
                             break;
                         } else {
                             if (false !== strpos($key, '*')) {
                                 if (!empty($urlDomainRoot)) {
                                     $domain .= $urlDomainRoot;
                                 }
                                 break;
                             }
                         }
                     }
                 }
             }
         }
     } elseif (!strpos($domain, '.')) {
         $rootDomain = Config::get('url_domain_root');
         if (empty($rootDomain)) {
             $host = $request->host();
             $rootDomain = substr_count($host, '.') > 1 ? substr(strstr($host, '.'), 1) : $host;
         }
         $domain .= '.' . $rootDomain;
     }
     return ($request->isSsl() ? 'https://' : 'http://') . $domain;
 }
Esempio n. 6
0
 public function setUp()
 {
     Route::rules(['GET' => [], 'POST' => [], 'PUT' => [], 'DELETE' => [], 'PATCH' => [], 'HEAD' => [], 'OPTIONS' => [], '*' => [], 'alias' => [], 'domain' => [], 'pattern' => [], 'name' => []]);
     Route::name([]);
 }
Esempio n. 7
0
 /**
  * URL路由检测(根据PATH_INFO)
  * @access public
  * @param  \think\Request $request
  * @param  array          $config
  * @return array
  * @throws \think\Exception
  */
 public static function routeCheck($request, array $config)
 {
     $path = $request->path();
     $depr = $config['pathinfo_depr'];
     $result = false;
     // 路由检测
     $check = !is_null(self::$routeCheck) ? self::$routeCheck : $config['url_route_on'];
     if ($check) {
         // 开启路由
         if (is_file(RUNTIME_PATH . 'route.php')) {
             // 读取路由缓存
             $rules = (include RUNTIME_PATH . 'route.php');
             if (is_array($rules)) {
                 Route::rules($rules);
             }
         } else {
             $files = $config['route_config_file'];
             foreach ($files as $file) {
                 if (is_file(CONF_PATH . $file . CONF_EXT)) {
                     // 导入路由配置
                     $rules = (include CONF_PATH . $file . CONF_EXT);
                     if (is_array($rules)) {
                         Route::import($rules);
                     }
                 }
             }
         }
         // 路由检测(根据路由定义返回不同的URL调度)
         $result = Route::check($request, $path, $depr, $config['url_domain_deploy']);
         $must = !is_null(self::$routeMust) ? self::$routeMust : $config['url_route_must'];
         if ($must && false === $result) {
             // 路由无效
             throw new RouteNotFoundException();
         }
     }
     if (false === $result) {
         // 路由无效 解析模块/控制器/操作/参数... 支持控制器自动搜索
         $result = Route::parseUrl($path, $depr, $config['controller_auto_search']);
     }
     return $result;
 }