/** * This action is executed before execute any action in the application * * @param Event $event * @param Dispatcher $dispatcher */ public function beforeDispatch(Event $event, Dispatcher $dispatcher) { $auth = $this->session->get('auth'); if (!$auth) { $role = 'Guests'; } else { $role = 'Users'; } $controller = $dispatcher->getControllerName(); $action = $dispatcher->getActionName(); $acl = $this->getAcl(); $allowed = $acl->isAllowed($role, $controller, $action); if ($allowed != Acl::ALLOW) { $dispatcher->forward(array('controller' => 'errors', 'action' => 'show401')); $this->session->destroy(); return false; } }
private static function _exec() { define('CURRENT_MODULE', Dispatcher::getModuleName()); define('CURRENT_CONTROLLER', Dispatcher::getControllerName()); define('CURRENT_ACTION', Dispatcher::getActionName()); $controllerName = CURRENT_CONTROLLER; $moduleName = CURRENT_MODULE; if ($moduleName) { $className = sprintf('controller\\%s\\%s', $moduleName, $controllerName); } else { $className = sprintf("controller\\%s", $controllerName); } //-----请求日志------// $params = array(); $log = array('request_id' => REQUEST_ID, 'uri' => $_SERVER['REQUEST_URI'], 'class' => array('module' => CURRENT_MODULE, 'controller' => CURRENT_CONTROLLER, 'action' => CURRENT_ACTION), 'method' => Request::method(), 'params' => array_merge($params, Request::gets(), Request::posts()), 'stream' => Request::stream(), 'cookie' => Request::cookies(), 'ip' => Request::ip()); C::log($log); if (!class_exists($className)) { throw new \RuntimeException('类不存在'); } try { $obj = new \ReflectionClass($className); if ($obj->isAbstract()) { throw new \RuntimeException('抽象类不可被实例化'); } $class = $obj->newInstance(); //前置操作 if ($obj->hasMethod(CURRENT_ACTION . 'Before')) { $beforeMethod = $obj->getMethod(CURRENT_ACTION . 'Before'); if ($beforeMethod->isPublic() && !$beforeMethod->isStatic()) { $beforeMethod->invoke($class); } } $method = $obj->getMethod(CURRENT_ACTION . 'Action'); if ($method->isPublic() && !$method->isStatic()) { $method->invoke($class); } //后置操作 if ($obj->hasMethod(CURRENT_ACTION . 'After')) { $afterMethod = $obj->getMethod(CURRENT_ACTION . 'After'); if ($afterMethod->isPublic() && !$afterMethod->isStatic()) { $afterMethod->invoke($class); } } } catch (\Exception $e) { self::_halt($e); } }
/** * Add new elements in breadcrumbs corresponding to request dispatcher : controllerName, actionName, parameters * @param Dispatcher $dispatcher the request dispatcher * @return \Ajax\bootstrap\html\HtmlBreadcrumbs */ public function fromDispatcher($dispatcher, $startIndex = 0) { $this->startIndex = $startIndex; $params = $dispatcher->getParams(); $action = $dispatcher->getActionName(); $items = array($dispatcher->getControllerName()); if (\sizeof($params) > 0 || \strtolower($action) != "index") { $items[] = $action; foreach ($params as $p) { if (\is_object($p) === false) { $items[] = $p; } } } return $this->addItems($items); }
/** * set the active page corresponding to request dispatcher : controllerName, actionName, parameters and $urlMask * @param Dispatcher $dispatcher the request dispatcher * @return \Ajax\bootstrap\html\HtmlPagination */ public function fromDispatcher($dispatcher) { $items = array($dispatcher->getControllerName(), $dispatcher->getActionName()); $items = array_merge($items, $dispatcher->getParams()); $url = implode("/", $items); if ($this->urlMask === "%page%") { $this->urlMask = preg_replace("/[0-9]/", "%page%", $url); } for ($index = $this->from; $index <= $this->to; $index++) { if ($this->getUrl($index) == $url) { $this->setActive($index); break; } } return $this; }