private static function action() { //禁止使用模块检测 if (in_array(MODULE, C('http.deny_module'))) { throw new Exception("模块禁止访问"); } $class = 'app\\' . MODULE . '\\controller\\' . CONTROLLER; //控制器不存在 if (!class_exists($class)) { throw new Exception("{$class} 不存在"); } $controller = Route::$app->make($class, true); //执行控制器中间件 Middleware::controller(); //执行动作 try { $result = App::callMethod($controller, ACTION); if (IS_AJAX && is_array($result)) { ajax($result); } else { echo $result; } } catch (ReflectionException $e) { $action = new ReflectionMethod($controller, '__call'); $action->invokeArgs($controller, [ACTION, '']); } }
private static function action() { //禁止使用模块检测 if (in_array(MODULE, C('http.deny_module'))) { throw new Exception("模块禁止访问"); } $class = 'app\\' . MODULE . '\\controller\\' . CONTROLLER; //控制器不存在 if (!class_exists($class)) { throw new Exception("{$class} 不存在"); } $controller = App::make($class, true); //执行控制器中间件 Middleware::controller(); //执行动作 try { /** * 参数处理 * 控制器路由方式访问时解析路由参数并注入到控制器方法参数中 */ //反射方法实例 $reflectionMethod = new \ReflectionMethod($class, ACTION); $args = []; foreach ($reflectionMethod->getParameters() as $k => $p) { if (isset(self::$routeArgs[$p->name])) { //如果GET变量中存在则将GET变量值赋予,也就是说GET优先级高 $args[$p->name] = self::$routeArgs[$p->name]; } else { //如果类型为类时分析类 if ($dependency = $p->getClass()) { $args[$p->name] = App::build($dependency->name); } else { //普通参数时获取默认值 $args[$p->name] = App::resolveNonClass($p); } } } //执行控制器方法 $result = $reflectionMethod->invokeArgs($controller, $args); if (IS_AJAX && is_array($result)) { ajax($result); } else { echo $result; } } catch (ReflectionException $e) { $action = new ReflectionMethod($controller, '__call'); $action->invokeArgs($controller, [ACTION, '']); } }