Exemplo n.º 1
0
 /**
  * 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;
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
 /**
  * 生成权限点
  */
 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);
 }