public static final function getDefaultApp() { if (strpos($_SERVER['HTTP_HOST'], 'admin') !== FALSE) { self::$app = DAGGER_APP_ADMIN; } else { self::$app = DAGGER_APP_SITE; } }
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; } } }
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); }