config = array_merge($this->config, $config); } /** * 获取配置 * @access public * @param string $name 配置名称 * @return mixed 配置值 */ public function __get($name = null) { if ($name) { return $this->config[$name]; } else { return $this->config; } } /** * 设置配置 * @access public * @param string $name 配置名称 * @param string $value 配置值 * @return void */ public function __set($name, $value) { if (isset($this->config[$name])) { $this->config[$name] = $value; } } /** * 检查配置 * @access public * @param string $name 配置名称 * @return bool */ public function __isset($name) { return isset($this->config[$name]); } public function getList($file,$type) { if($type=='folder'){ return $this->getFileList($file); }elseif($type=='file'){ return $this->getActionList($file); } } /** * @title: 获取文件下的公共方法 * @desc: * @param {*} $file * @return {*} * @Author: Rock * @Date: 2021-07-13 23:42:17 * @LastEditTime: Do not edit */ public function getActionList($file) { $class = str_replace(root_path(),'',$file); $class = str_replace('/','\\',$class); return $this->getMethod($class); } /** * @title: 获取目录下的文件夹和文件 * @desc: * @param {*} $path * @return {*} * @Author: Rock * @Date: 2021-07-13 20:49:52 * @LastEditTime: Do not edit */ public function getFileList($path) { $list = []; $files = $this->getChildFile($path); foreach($files as $value){ $file = $path.DS.$value; if(is_file($file)){ $classpath = $path.DS.basename($value,$this->ext); $item = $this->parseCls($classpath); $item['type'] = 'file'; //检测是否有公共的方法 $children = $this->getMethod($item['class']); if(count($children)>0){ $item['hasChild'] = true; $list[] = $item; } }elseif(is_dir($file)){ $classFile = $file.DS.$this->FolderDescFile; if(!is_file($classFile)){ $this->createDescFile($classFile,$value); } $classpath = $path.DS.$value.DS.basename($this->FolderDescFile,$this->ext); $item = $this->parseCls($classpath); $item['type'] = 'folder'; $item['path'] = $file; //检测是否有子文件 $children = $this->getChildFile($file); if(count($children)>0){ $item['hasChild'] = true; $list[] = $item; } } } return $list; } /** * @title: 创建文件夹说明文件 * @desc: * @param {*} $file * @param {*} $name * @return {*} * @Author: Rock * @Date: 2021-07-13 21:55:55 * @LastEditTime: Do not edit */ private function createDescFile($file,$name) { $dir = dirname($file); chmod($dir,0777); $classname = basename($this->FolderDescFile,$this->ext); $namespace = str_replace(root_path(),"",$dir); $namespace = str_replace('/','\\',$namespace); $content = "getDocComment(); $doc = new Parser(); $class_doc = $doc->parse_class($doc_str); $info['class'] = $class; $info['name'] = $name; $info['path'] = $classpath; $info['title'] = isset($class_doc['title'])?$class_doc['title']:$name; $info['icon'] = isset($class_doc['icon'])?$class_doc['icon']:''; $info['desc'] = isset($class_doc['desc'])?$class_doc['desc']:''; $info['author'] = isset($class_doc['Author'])?$class_doc['Author']:'无名'; $info['LastEditTime'] = isset($class_doc['LastEditTime'])?$class_doc['LastEditTime']:''; }else{ $info['class'] = $class; $info['name'] = $name; $info['path'] = $classpath; $info['title'] = $name; $info['icon'] = ''; $info['desc'] = ''; $info['author'] = '无名'; $info['LastEditTime'] = ''; } $info['is_leaf'] = false; return $info; } /** * @title: 获取类里面的公共方法 * @desc: * @param {*} $class * @return {*} * @Author: Rock * @Date: 2021-07-14 09:27:20 * @LastEditTime: Do not edit */ private function getMethod($class) { $list = []; if(class_exists($class)){ $doc = new Parser(); $reflection = new \ReflectionClass($class); //获取公共方法 $methods = $reflection->getMethods(\ReflectionMethod::IS_PUBLIC); //过滤不需要解析的方法以及非当前类的方法(父级方法) $filter_method = array_merge(['__construct','initialize','_initialize','__destruct'], $this->config['filter_method']); foreach ($methods as $key => $action) { if (!in_array($action->name, $filter_method) && $action->class === $class) { if ($doc->parse_action($action)){ $temp = $doc->parse_action($action); if(!empty($temp['title'])){ $info = $doc->parse_action($action); $item = [ 'name' => $action->name, 'class' => $class, 'path' => root_path().$class.'\\'.$action->name, 'title' => $info['title'], 'icon' => isset($info['icon'])?$info['icon']:'', 'desc' => isset($info['desc'])?$info['desc']:'', 'author' => isset($class_doc['Author'])?$class_doc['Author']:'无名', 'LastEditTime' => isset($info['LastEditTime'])?$info['LastEditTime']:'', 'type' => 'action', 'is_leaf' => true, ]; $list[] = $item; } } } } } return $list; } /** * @title: 获取目录下的文件及文件夹 * @desc: * @param {*} $path * @return {*} * @Author: Rock * @Date: 2021-07-14 09:27:49 * @LastEditTime: Do not edit */ private function getChildFile($path) { $list = []; $files = scandir($path); foreach($files as $value){ if($value!='.' && $value!='..'){ $list[] = $value; } } return $list; } /** * 获取接口详情 * @param string $class * @param string $action * * @return array|bool */ public function get_api_detail($class='',$action='') { $method = (new \ReflectionClass($class))->getMethod($action); return (new Parser())->parse_action($method); } }