public function checkParams(&$class, &$action_name, &$params) { if (!method_exists($class, 'getParams')) { throw new RuntimeException('获取参数列表失败'); } $paramsInfos = $class->getParams(); apiUtil::paramsValidate($params, $paramsInfos); //预处理下params //转化下数据的格式,比如对数据结构fields进行转化和extends扩展等 $params = apiUtil::pretreatment($params, $paramsInfos); //判断下方法是否存在 if (!method_exists($class, $action_name)) { throw new RuntimeException('找不到方法 :' . $action_name); } return $params; }
protected function callInternal($flag, $parameters = array()) { $apis = config::get('apis.routes'); if (array_key_exists($flag, $apis)) { list($class, $method) = explode('@', $apis[$flag]['uses']); } else { throw new InvalidArgumentException("Api [{$flag}] not defined"); } $instance = new $class(); $apiParams = $instance->getParams(); //验证数据 //通过传入数据和api原定义的类型进行比对 apiUtil::paramsValidate($parameters, $apiParams); //因为有些数据需要批量处理,就防这里了 $apiParameters = apiUtil::pretreatment($parameters, $apiParams); return call_user_func(array($instance, $method), $apiParameters); }