/** * Find a matching route to the current Request and inject * returning values to the Request object. * * @return bool if there is a valid route */ public function route(Yaf_Request_Abstract $request) { $requestUri = $request->getRequestUri(); //去掉根目录 $baseuri = $request->getBaseUri(); if ($requestUri != '' && $baseuri != '' && stripos($requestUri, $baseuri) === 0) { $path = substr($requestUri, strlen($baseuri)); } else { $path = $requestUri; } //支持rewrite路由 $matches = null; $rewrites = Yaf_G::getConf('rewrite', 'route'); $rest = explode('?', $path, 2); $path = $rest[0]; if (!empty($rewrites)) { foreach ($rewrites as $k => $v) { $matches = null; if (preg_match($k, $path, $matches)) { $path = preg_replace($k, $v, $path); break; } } } if (!empty($rest[1])) { $path .= '?' . $rest[1]; } //取得Route $aRoute = Yaf_G::getRoute($path); $request->setModuleName($aRoute['module']); $request->setControllerName($aRoute['controller']); $request->setActionName($aRoute['action']); //解析参数 parse_str($aRoute['query'], $params); /* $params = array(); $rest = $aRoute['query']; $numSegs = count($rest); if ($numSegs > 0) { for ($i = 0; $i < $numSegs; $i = $i + 2) { $key = $rest[$i]; $val = isset($rest[$i + 1]) ? $rest[$i + 1]: null; $params[$key] = (isset($params[$key]) ? (array_merge((array) $params[$key], array( $val ))) : $val); } } */ //rewrite参数解析 if (!empty($matches)) { foreach ($matches as $k => $v) { if (!is_numeric($k)) { $params[$k] = $v; } } } $request->setParam($params); return true; }
public function permissionAction() { $aMenuList = Model_Menu::getMenus(); $aCtrClass = array(); $aMenuAction = array(); foreach ($aMenuList as $aMenu) { if ($aMenu['bIsLeaf']) { $aRoute = Yaf_G::getRoute($aMenu['sUrl']); $aMenuAction[$aRoute['module'] . '_' . $aRoute['controller'] . '_' . $aRoute['action']] = $aMenu['sMenuName']; $aCtrClass[$aRoute['module'] . '_' . $aRoute['controller']] = array('iMenuID' => $aMenu['iMenuID'], 'sMenuName' => $aMenu['sMenuName'], 'sUrl' => $aMenu['sUrl']); } } $aPermission = array(); foreach ($aCtrClass as $sCtrClass => $aMenu) { try { $sCtrClass = 'Controller_' . $sCtrClass; if (class_exists($sCtrClass)) { $oCtr = new ReflectionClass($sCtrClass); $aMethod = $oCtr->getMethods(); foreach ($aMethod as $oMethod) { $sAction = $oMethod->getName(); if (substr($sAction, -6) === 'Action') { $sAction = substr($sAction, 0, -6); $aRow = array($aMenu['iMenuID']); $aRow[] = Yaf_G::routeToUrl($sCtrClass . '_' . $sAction); $sDoc = $oMethod->getDocComment(); $matches = null; if (preg_match('/\\s+\\*\\s+(.+)/i', $sDoc, $matches)) { $aRow[] = $matches[1]; } elseif (isset($aMenuAction[$sCtrClass . '_' . $sAction])) { $aRow[] = $aMenuAction[$sCtrClass . '_' . $sAction]; } else { $aRow[] = $aMenu['sMenuName'] . '::' . $sAction; } $aPermission[] = $aRow; } } } } catch (Exception $e) { $aPermission[] = array($aMenu['iMenuID'], Yaf_G::getUrl($aMenu['sUrl']), $aMenu['sMenuName']); } } $this->showMsg($aPermission, true); }
/** * 生成权限点 */ public function makeAction() { $aMenuList = Model_Menu::getMenus(); $aCtrClass = array(); $aMenuAction = array(); foreach ($aMenuList as $aMenu) { if ($aMenu['bIsLeaf']) { $aRoute = Yaf_G::getRoute($aMenu['sUrl']); $aMenuAction[$aRoute['module'] . '_' . $aRoute['controller'] . '_' . $aRoute['action']] = $aMenu['sMenuName']; $aCtrClass[$aRoute['module'] . '_' . $aRoute['controller']] = array('iMenuID' => $aMenu['iMenuID'], 'sMenuName' => $aMenu['sMenuName'], 'sUrl' => $aMenu['sUrl']); } } $aPermission = array(); foreach ($aCtrClass as $sCtrClass => $aMenu) { try { $sCtrClass = 'Controller_' . $sCtrClass; if (class_exists($sCtrClass)) { $oCtr = new ReflectionClass($sCtrClass); $aMethod = $oCtr->getMethods(); foreach ($aMethod as $oMethod) { $sAction = $oMethod->getName(); if (substr($sAction, -6) === 'Action') { $sAction = substr($sAction, 0, -6); $aRow = array($aMenu['iMenuID']); $aRow[] = Yaf_G::routeToUrl($sCtrClass . '_' . $sAction); $sDoc = $oMethod->getDocComment(); $matches = null; if (preg_match('/\\s+\\*\\s+(.+)/i', $sDoc, $matches)) { $aRow[] = $matches[1]; } elseif (isset($aMenuAction[$sCtrClass . '_' . $sAction])) { $aRow[] = $aMenuAction[$sCtrClass . '_' . $sAction]; } else { $aRow[] = $aMenu['sMenuName'] . '::' . $sAction; } $aPermission[] = $aRow; } } } } catch (Exception $e) { $aPermission[] = array($aMenu['iMenuID'], Yaf_G::getUrl($aMenu['sUrl']), $aMenu['sMenuName']); } } $iCnt = 0; foreach ($aPermission as $v) { $aRow = Model_Permission::getRow(array('where' => array('sPath' => $v[1]))); if (empty($aRow)) { $aRow = array('iMenuID' => $v[0], 'sPermissionName' => $v[2], 'sPath' => $v[1]); Model_Permission::addData($aRow); $iCnt++; } else { $aRow['iMenuID'] = $v[0]; $aRow['sPermissionName'] = $v[2]; Model_Permission::updData($aRow); $iCnt++; } } return $this->showMsg('本次生成权限点【' . $iCnt . '】个', true); }