Esempio n. 1
0
 /**
  * Processes a request and sets its controller and action based on a
  * supervar value.
  *
  * @param  Yaf_Request_Abstract
  *
  * @return Yaf_Request_Abstract|boolean
  */
 public function route(Yaf_Request_Abstract $request)
 {
     $requestUri = $request->getQuery($this->_varName);
     if ($requestUri == null || $requestUri == '') {
         return false;
     }
     $module = null;
     $controller = null;
     $action = null;
     $rest = null;
     $path = trim($requestUri, Yaf_Router::URI_DELIMITER);
     if ($path != '' && $path != '/') {
         $path = explode(Yaf_Router::URI_DELIMITER, $path);
         if (Yaf_Application::isModuleName($path[0])) {
             $module = $path[0];
             array_shift($path);
         }
         if (count($path) && !empty($path[0])) {
             $controller = $path[0];
             array_shift($path);
         }
         if (count($path) && !empty($path[0])) {
             $action = $path[0];
             array_shift($path);
         }
         $rest = implode(Yaf_Router::URI_DELIMITER, $path);
         $actionPrefer = Yaf_G::iniGet('yaf.action_prefer');
         if ($module == null && $controller == null && $action == null) {
             if ($actionPrefer == true) {
                 $action = $rest;
             } else {
                 $controller = $rest;
             }
             $rest = null;
         } elseif ($module == null && $action == null && $rest == null) {
             if ($actionPrefer == true) {
                 $action = $controller;
                 $controller = null;
             }
         } elseif ($controller == null && $action == null && $rest != null) {
             $controller = $module;
             $action = $rest;
             $module = null;
             $rest = null;
         } elseif ($action == null && $rest == null) {
             $action = $controller;
             $controller = $module;
             $module = null;
         } elseif ($controller == null && $action == null) {
             $controller = $module;
             $action = $rest;
             $module = null;
             $rest = null;
         } elseif ($action == null) {
             $action = $rest;
             $rest = null;
         }
         if ($module != null) {
             $request->setModuleName($module);
         }
         if ($controller != null) {
             $request->setControllerName($controller);
         }
         if ($action != null) {
             $request->setActionName($action);
         }
         $params = array();
         if ($rest != null && trim($rest) != '') {
             $path = explode(Yaf_Router::URI_DELIMITER, $rest);
             if (($numSegs = count($path)) != 0) {
                 for ($i = 0; $i < $numSegs; $i = $i + 2) {
                     $key = urldecode($path[$i]);
                     $val = isset($path[$i + 1]) ? urldecode($path[$i + 1]) : null;
                     $params[$key] = isset($params[$key]) ? array_merge((array) $params[$key], array($val)) : $val;
                 }
             }
             $request->setParam($params);
         }
     }
     return true;
 }
Esempio n. 2
0
 /**
  * 路由结束事件
  *
  * @author         mrmsl <*****@*****.**>
  * @date           2012-12-25 09:33:26
  * @lastmodify     2013-02-17 11:43:31 by mrmsl
  *
  * @param object $request  Yaf_Request_Http实例
  * @param object $response Yaf_Response_Http实例
  *
  * @return void 无返回值
  */
 public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)
 {
     define('CONTROLLER_NAME', $request->getControllerName());
     //控制器
     define('ACTION_NAME', $request->getActionName());
     //操作方法
     define('REQUEST_METHOD', $request->getMethod());
     //请求方法
     define('TEMPLATE_FILE', THEME_PATH . strtolower(CONTROLLER_NAME) . '/' . ACTION_NAME . C('TEMPLATE_SUFFIX'));
     //模板文件
     define('REFERER_PAGER', empty($_SERVER['HTTP_REFERER']) ? '' : urldecode($_SERVER['HTTP_REFERER']));
     //来路页面
     //请求uri
     if (isset($_SERVER['REQUEST_URI'])) {
         define('REQUEST_URI', urldecode($_SERVER['REQUEST_URI']));
     } else {
         $querystring = $request->getQuery();
         /**
          * @ignore
          */
         define('REQUEST_URI', urldecode($request->getRequestUri() . ($querystring ? '?' . http_build_query($querystring) : '')));
     }
     $this->_denyControllers();
     //禁止直接访问Error,Base控制器
     if ($languages = F(MODULE_NAME . DS . LANG . DS . strtolower(CONTROLLER_NAME), '', LANG_PATH)) {
         //当前控制器语言包
         L($languages);
     }
 }