/** * 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; }
/** * 路由结束事件 * * @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); } }