Ejemplo n.º 1
0
 /**
  * 测试对 URL 的分析
  */
 function testParse()
 {
     $router = new QRouter(QContext::instance());
     foreach ($this->_tests_url as $route_name => $test) {
         list($route_name) = explode('-', $route_name);
         $path = $test['_path'];
         unset($test['_path']);
         $result = $router->match($path);
         foreach ($test as $varname => $value) {
             if (!array_key_exists($varname, $result) || $value != $result[$varname]) {
                 QDebug::dump($router->get($route_name), "route: {$route_name}");
                 QDebug::dump($result, 'parse result');
             }
             $this->assertArrayHasKey($varname, $result);
             $this->assertEquals($value, $result[$varname], sprintf('expected varname "%s" value is "%s".', $varname, $value));
             unset($result[$varname]);
         }
         $this->assertEmpty($result);
     }
 }
Ejemplo n.º 2
0
 /**
  * 测试对 URL 的分析
  */
 function testParse()
 {
     $router = new QRouter();
     $router->import(Q::ini('routes'));
     foreach ($this->_tests_url as $route_name => $test) {
         list($route_name) = explode('-', $route_name);
         $path = $test['_path'];
         unset($test['_path']);
         $result = $router->match($path);
         $this->assertType('array', $result);
         foreach ($test as $varname => $value) {
             if (!array_key_exists($varname, $result) || $value != $result[$varname]) {
                 $r = $router->lastMatchedRouteName();
                 dump($test, "path: {$path}");
                 dump($router->get($r), "matched route: {$r}");
                 dump($result, 'parse result');
                 dump($router->get($route_name), "expected route: {$route_name}");
             }
             $this->assertArrayHasKey($varname, $result, "\$result has't key: {$varname}.");
             $this->assertEquals($value, $result[$varname], sprintf('expected varname "%s" value is "%s".', $varname, $value));
             unset($result[$varname]);
         }
         foreach ($result as $key => $value) {
             switch ($key) {
                 case QContext::UDI_CONTROLLER:
                 case QContext::UDI_NAMESPACE:
                 case QContext::UDI_MODULE:
                     $this->assertEquals('default', $value);
                     break;
                 case QContext::UDI_ACTION:
                     $this->assertEquals('index', $value);
                     break;
                 default:
                     $this->assertEmpty($value, "\$result[{$key}] not empty.");
             }
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * 根据服务器运行环境,重新初始化 QContext 对象
  *
  * @param boolean $full_init 是否进行完全的初始化
  */
 function reinit($full_init = false)
 {
     if ($full_init) {
         $this->_params = array();
         $this->_router = null;
     }
     self::$_request_uri = null;
     self::$_base_uri = null;
     self::$_base_dir = null;
     self::$_url_mode = null;
     // 如果有必要,初始化路由服务
     $url_mode = strtolower(Q::ini('dispatcher_url_mode'));
     if (is_null($this->_router) && ($url_mode == self::URL_MODE_PATHINFO || $url_mode == self::URL_MODE_REWRITE)) {
         $this->_router = new QRouter();
         $this->_router->import(Q::ini('routes'), 'global_default_routes');
         $result = $this->_router->match('/' . ltrim($this->pathinfo(), '/'));
         if ($result) {
             foreach ($result as $var => $value) {
                 if (strlen($value) === 0) {
                     continue;
                 }
                 if (!isset($_GET[$var]) || strlen($_GET[$var]) === 0) {
                     $_GET[$var] = $_REQUEST[$var] = $value;
                 }
             }
         }
     }
     self::$_url_mode = $url_mode;
     // 从 $_GET 中提取请求参数
     $keys = array_keys($_GET);
     if (!empty($keys)) {
         $keys = array_combine($keys, $keys);
         $keys = array_change_key_case($keys);
     }
     $udi = array();
     $udi[self::UDI_CONTROLLER] = isset($keys[self::UDI_CONTROLLER]) ? $_GET[$keys[self::UDI_CONTROLLER]] : null;
     $udi[self::UDI_ACTION] = isset($keys[self::UDI_ACTION]) ? $_GET[$keys[self::UDI_ACTION]] : null;
     $udi[self::UDI_MODULE] = isset($keys[self::UDI_MODULE]) ? $_GET[$keys[self::UDI_MODULE]] : null;
     $udi[self::UDI_NAMESPACE] = isset($keys[self::UDI_NAMESPACE]) ? $_GET[$keys[self::UDI_NAMESPACE]] : null;
     $this->changeRequestUDI($udi);
 }
Ejemplo n.º 4
0
 /**
  * 根据 php.ini 中的 magic quotes gpc 设置去除超全局变量中自动添加的转义符
  */
 private function _initOneTime()
 {
     if (self::$_root) {
         return;
     }
     self::$_root = $this;
     // 禁止 magic quotes
     set_magic_quotes_runtime(0);
     // 处理被 magic quotes 自动转义过的数据
     if (get_magic_quotes_gpc()) {
         $in = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
         while (list($k, $v) = each($in)) {
             foreach ($v as $key => $val) {
                 if (!is_array($val)) {
                     $in[$k][$key] = stripslashes($val);
                     continue;
                 }
                 $in[] =& $in[$k][$key];
             }
         }
         unset($in);
     }
     $url_mode = strtolower($this->getIni('dispatcher_url_mode'));
     if ($url_mode == self::URL_MODE_PATHINFO || $url_mode == self::URL_MODE_REWRITE) {
         $this->_router = new QRouter($this);
         $result = $this->_router->match($this->getPathinfo());
         if ($result) {
             foreach ($result as $var => $value) {
                 if (empty($_GET[$var])) {
                     $_GET[$var] = $_REQUEST[$var] = $value;
                 }
             }
         }
         self::$_url_mode = $url_mode;
     } else {
         self::$_url_mode = self::URL_MODE_STANDARD;
         $this->_router = null;
     }
 }