Example #1
0
 /**
  * 开始路由匹配
  * @author Xiao Tangren  <*****@*****.**>
  * @data 2014-03-05
  * @param UnPHP_Request_Abstract $request
  */
 public function route(UnPHP_Request_Abstract $request)
 {
     $rs = FALSE;
     $base_url = $request->getServer('REQUEST_URI');
     $selfPramas = stripos($base_url, '?');
     $base_url = $selfPramas ? substr($base_url, 0, $selfPramas) : $base_url;
     if ($base_url == '/') {
         $request->setModuleName($request->getDefaultModule());
         $request->setControllerName($request->getDefaultController());
         $request->setActionName($request->getDefaultAction());
         $rs = TRUE;
     }
     $this->_routes['default'] = new UnPHP_Route_Default();
     if (FALSE === $rs && !empty($this->_routes)) {
         // 遍历理由协议
         foreach ($this->_routes as $name => $route) {
             if ($route->route($request)) {
                 $this->_current_route = $name;
                 $rs = TRUE;
                 break;
             }
         }
     }
     return $rs;
 }
 public function route(UnPHP_Request_Abstract $request)
 {
     $rs = false;
     $m = $request->getQuery($this->m);
     $c = $request->getQuery($this->c);
     $a = $request->getQuery($this->a);
     $c = !empty($m) && empty($c) ? $request->getDefaultController() : $c;
     $a = !empty($m) && !empty($c) && empty($a) ? $request->getDefaultAction() : $a;
     if (!empty($m) && !empty($c) && !empty($a)) {
         $rs = true;
         $request->setModuleName($m);
         $request->setControllerName($c);
         $request->setActionName($a);
     }
     return $rs;
 }
 /**
  * 分发之前
  * 如果在一个请求处理过程中, 发生了forward, 则这个事件会被触发多次
  * @author xiaotangren  <*****@*****.**>
  */
 public function preDispatch(UnPHP_Request_Abstract $request, UnPHP_Response_Abstract $response)
 {
     //$this->initModule($module_name, $request, $response);
     if (Pub_Url::$custom_route) {
         $data = Pub_Url::$custom_route;
         if ($data['type'] == 'p') {
             $request->module = 'Goods';
             $request->controller = 'Index';
             $request->action = 'index';
             $request->method = 'GET';
             $request->setParam('id', $data['id']);
         } else {
             $request->module = 'Category';
             $request->controller = 'Index';
             $request->action = 'index';
             $request->method = 'GET';
             $request->setParam('ocid', $data['id']);
         }
     }
     $module_name = $request->getModuleName();
     //var_dump($module_name);exit;
     $this->initModule($module_name, $request, $response);
 }
 /**
  * 默认路由: /m/c/a/params1/1/params2/2/...
  * @author Xiao Tangren  <*****@*****.**>
  * @data 2014-03-05
  * @param type $request
  * @return boolean
  */
 public function route(UnPHP_Request_Abstract $request)
 {
     $rs = FALSE;
     $match = array();
     $base_url = $request->getServer('REQUEST_URI');
     $selfPramas = stripos($base_url, '?');
     $base_url = $selfPramas ? substr($base_url, 0, $selfPramas) : $base_url;
     $match = explode("/", trim($base_url, '/\\'));
     $n = count($match);
     switch ($n) {
         case 0:
             $request->setModuleName($request->getDefaultModule());
             $request->setControllerName($request->getDefaultController());
             $request->setActionName($request->getDefaultAction());
             $rs = TRUE;
             break;
         case 1:
             if (in_array($match[0], UnPHP::app()->getModules())) {
                 $request->setModuleName($match[0]);
                 $request->setControllerName($request->getDefaultController());
                 $request->setActionName($request->getDefaultAction());
             } else {
                 $request->setModuleName($request->getDefaultModule());
                 $request->setControllerName($match[0]);
                 $request->setActionName($request->getDefaultAction());
             }
             $rs = TRUE;
             break;
         case 2:
             if (in_array($match[0], UnPHP::app()->getModules())) {
                 $request->setModuleName($match[0]);
                 $request->setControllerName($match[1]);
                 $request->setActionName($request->getDefaultAction());
                 $rs = TRUE;
                 break;
             } else {
                 $request->setModuleName($request->getDefaultModule());
                 $request->setControllerName($match[0]);
                 $request->setActionName($match[1]);
                 $rs = TRUE;
                 break;
             }
         default:
             if (in_array($match[0], UnPHP::app()->getModules())) {
                 $request->setModuleName($match[0]);
                 $request->setControllerName($match[1]);
                 $request->setActionName($match[2]);
                 for ($i = 4; $i < $n; $i += 2) {
                     $request->setParam($match[$i - 1], $match[$i]);
                 }
             } else {
                 $request->setModuleName($request->getDefaultModule());
                 $request->setControllerName($match[0]);
                 $request->setActionName($match[1]);
                 for ($i = 3; $i < $n; $i += 2) {
                     $request->setParam($match[$i - 1], $match[$i]);
                 }
             }
             $rs = TRUE;
             break;
     }
     return $rs;
 }