/** * 运行对应的控制器 * * @return void */ public final function runAppController() { //检测csrf跨站攻击 Secure::checkCsrf(Config::get('check_csrf')); // 关闭GPC过滤 防止数据的正确性受到影响 在db层防注入 if (get_magic_quotes_gpc()) { Secure::stripslashes($_GET); Secure::stripslashes($_POST); Secure::stripslashes($_COOKIE); Secure::stripslashes($_REQUEST); //在程序中对get post cookie的改变不影响 request的值 } //session保存方式自定义 if (Config::get('session_user')) { Session::init(); } else { ini_get('session.auto_start') || session_start(); //自动开启session } header('Cache-control: ' . Config::get('http_cache_control')); // 页面缓存控制 //如果有子类中有init()方法 执行Init() eg:做权限控制 if (method_exists($this, "init")) { $this->init(); } //根据动作去找对应的方法 $method = Route::$urlParams['action']; if (method_exists($this, $method)) { $this->{$method}(); } elseif ($GLOBALS['debug']) { Cml::montFor404Page(); throwException(Lang::get('_ACTION_NOT_FOUND_', Route::$urlParams['action'])); } else { Cml::montFor404Page(); Response::show404Page(); } }
/** * 启动应用 * * @param callable $initDi 注入依赖 */ public static function runApp(callable $initDi) { //系统初始化 self::init($initDi); Plugin::hook('cml.before_run_controller'); $controllerAction = Cml::getContainer()->make('cml_route')->getControllerAndAction(); if ($controllerAction) { Cml::$debug && Debug::addTipInfo(Lang::get('_CML_ACTION_CONTROLLER_', $controllerAction['class'])); $controller = new $controllerAction['class'](); call_user_func([$controller, "runAppController"], $controllerAction['action']); //运行 } else { self::montFor404Page(); if (self::$debug) { throw new ControllerNotFoundException(Lang::get('_CONTROLLER_NOT_FOUND_')); } else { Response::show404Page(); } } //输出Debug模式的信息 self::cmlStop(); }
/** * 启动框架 * */ public static function runApp() { //系统初始化 self::init(); //控制器所在路径 $actionController = CML_APP_CONTROLLER_PATH . Route::$urlParams['controller'] . 'Controller.php'; $GLOBALS['debug'] && Debug::addTipInfo(Lang::get('_CML_ACTION_CONTROLLER_', $actionController)); Plugin::hook('cml.before_run_controller'); if (is_file($actionController)) { $className = Route::$urlParams['controller'] . 'Controller'; $className = (CML_IS_MULTI_MODULES ? '' : '\\Controller') . Route::$urlParams['path'] . (CML_IS_MULTI_MODULES ? 'Controller' . DIRECTORY_SEPARATOR : '') . "{$className}"; $className = str_replace('/', '\\', $className); $controller = new $className(); call_user_func(array($controller, "runAppController")); //运行 } else { self::montFor404Page(); if ($GLOBALS['debug']) { throwException(Lang::get('_CONTROLLER_NOT_FOUND_', CML_APP_CONTROLLER_PATH, Route::$urlParams['controller'], str_replace('/', '\\', Route::$urlParams['path']) . Route::$urlParams['controller'])); } else { Response::show404Page(); } } //输出Debug模式的信息 self::cmlStop(); }