Example #1
0
 public static final function getDefaultApp()
 {
     if (strpos($_SERVER['HTTP_HOST'], 'admin') !== FALSE) {
         self::$app = DAGGER_APP_ADMIN;
     } else {
         self::$app = DAGGER_APP_SITE;
     }
 }
Example #2
0
 public static final function getDefaultApp()
 {
     if (strpos($_SERVER['HTTP_HOST'], 'admin') !== FALSE) {
         self::$app = DAGGER_APP_ADMIN;
     } else {
         if (strpos($_SERVER['REQUEST_URI'], '/home/') === 0) {
             self::$app = DAGGER_APP_HOME;
         } else {
             self::$app = DAGGER_APP_HOPE;
         }
     }
 }
Example #3
0
 public static function route()
 {
     if (isset($_GET[DAGGER_APP]) && preg_match('/^\\w*$/i', $_GET[DAGGER_APP])) {
         Configure::$app = $_GET[DAGGER_APP];
     } else {
         Configure::getDefaultApp();
     }
     if (DAGGER_ROUTER == 1 && !empty(RouterConfig::$config[Configure::$app])) {
         $uri = str_replace('/index.php', '', $_SERVER['REQUEST_URI']);
         //对于中文,已经变为urlencode,参数化的时候需要先decode出来
         $uri = urldecode($uri);
         defined('DAGGER_DEBUG') && BaseModelCommon::debug($uri, 'router_request_uri');
         //从uri中过滤掉key value查询串
         $uri = explode('?', $uri);
         $uri = array_shift($uri);
         $uriArr = explode('/', trim($uri, '/'));
         $uriArrWithoutApp = array();
         //判断是否选择了app
         foreach ($uriArr as $uripart) {
             if (strpos($uripart, DAGGER_APP_PREFIX) === 0) {
                 Configure::$app = substr($uripart, strlen(DAGGER_APP_PREFIX));
                 self::$get[DAGGER_APP] = Configure::$app;
             } else {
                 if (strlen($uripart) > 0) {
                     $uriArrWithoutApp[] = $uripart;
                 }
             }
         }
         $uri = '/' . implode('/', $uriArrWithoutApp);
         //从URI中去除baseurl中的多级目录
         $baseUrlArr = explode('/', RouterConfig::$baseUrl[Configure::$app], 2);
         if (!empty($baseUrlArr[1])) {
             $baseUrl = '/' . trim($baseUrlArr[1], '/');
             if (strpos($uri, $baseUrl) === 0) {
                 defined('DAGGER_DEBUG') && BaseModelCommon::debug('url规则匹配上BaseUrl:' . $baseUrl, 'router_base_url');
                 //匹配RouterConfig中设置的对应BaseUrl
                 $uri = substr($uri, strlen($baseUrl));
                 $uri === false && ($uri = "");
             }
         }
         //将uri变为参数数组
         $paramsArr = explode('/', trim($uri, '/'));
         self::$get = array_merge(self::$get, $_GET);
         $configArr = RouterConfig::$config[Configure::$app];
         if (isset($configArr[$paramsArr[0]])) {
             /**
              * 从URI的第一个参数开始,搜索RouterConfig中的配置项。
              * 不能匹配的URI参数尝试匹配下一个RouterConfig配置项
              */
             $_GET[DAGGER_CONTROLLER] = $paramsArr[0];
             self::$get[DAGGER_CONTROLLER] = $_GET[DAGGER_CONTROLLER];
             array_shift($paramsArr);
             $configArr = $configArr[$_GET[DAGGER_CONTROLLER]];
             if (!isset($_GET[DAGGER_ACTION])) {
                 if (isset($paramsArr[0]) && isset($configArr[$paramsArr[0]])) {
                     $_GET[DAGGER_ACTION] = $paramsArr[0];
                     self::$get[DAGGER_ACTION] = $_GET[DAGGER_ACTION];
                     array_shift($paramsArr);
                 } elseif (isset(RouterConfig::$defaultRouter) && isset(RouterConfig::$defaultRouter[Configure::$app]['default_action'][$_GET[DAGGER_CONTROLLER]])) {
                     $_GET[DAGGER_ACTION] = RouterConfig::$defaultRouter[Configure::$app]['default_action'][$_GET[DAGGER_CONTROLLER]];
                 } else {
                     throw new BaseModelException("APP:" . Configure::$app . ",controller:" . $_GET[DAGGER_CONTROLLER] . "没有设置默认action", 90206, 'router_trace');
                 }
             }
             $configArr = explode('/', $configArr[$_GET[DAGGER_ACTION]]);
         } else {
             //检测是否有controller参数,没有使用默认设置
             if (!isset($_GET[DAGGER_CONTROLLER])) {
                 if (isset(RouterConfig::$defaultRouter) && isset(RouterConfig::$defaultRouter[Configure::$app]['default_controller'])) {
                     $_GET[DAGGER_CONTROLLER] = RouterConfig::$defaultRouter[Configure::$app]['default_controller'];
                 } else {
                     throw new BaseModelException("APP:" . Configure::$app . "没有设置默认Controller", 90205, 'router_trace');
                 }
                 if (isset($_GET[DAGGER_ACTION])) {
                     throw new BaseModelException("指定action参数时必须指定controller参数", 90207, 'router_trace');
                 }
             }
             if (!isset($_GET[DAGGER_ACTION])) {
                 //使用默认action设置
                 if (isset(RouterConfig::$defaultRouter) && isset(RouterConfig::$defaultRouter[Configure::$app]['default_action'][$_GET[DAGGER_CONTROLLER]])) {
                     $_GET[DAGGER_ACTION] = RouterConfig::$defaultRouter[Configure::$app]['default_action'][$_GET[DAGGER_CONTROLLER]];
                 } else {
                     throw new BaseModelException("APP:" . Configure::$app . ",controller:" . $_GET[DAGGER_CONTROLLER] . "没有设置默认action", 90206, 'router_trace');
                 }
             }
         }
         while (!empty($paramsArr[0])) {
             if (empty($configArr)) {
                 self::init(Configure::$app);
                 defined('DAGGER_DEBUG') && BaseModelCommon::debug(RouterConfig::$config, "router_RouterConfig");
                 throw new BaseModelException("[app]:" . Configure::$app . " [controller]:{$_GET[DAGGER_CONTROLLER]} [action]:{$_GET[DAGGER_ACTION]} ,不识别“/" . implode("/", $paramsArr) . "”,请配置路由规则", 90200, 'router_trace');
             }
             if (self::match($configArr[0], $paramsArr[0])) {
                 array_shift($paramsArr);
             }
             array_shift($configArr);
         }
         defined('DAGGER_DEBUG') && BaseModelCommon::debug($_GET, 'router_$_GET');
     }
     $_GET[DAGGER_APP] = Configure::$app;
     self::init(Configure::$app);
 }