ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行
<?php namespace Home\Controller; use Common\Controller\BaseController; class AuthController extends BaseController{ /** * @cc index主页面 */ public function index(){ $modules = array ( 'Home' ); //模块名称 $i = 0; foreach ( $modules as $module ) { $all_controller = $this ->getController( $module ); foreach ( $all_controller as $controller ) { $controller_name = $controller ; $all_action = $this ->getAction( $module , $controller_name ); foreach ( $all_action as $action ) { $data [ $i ] = array ( 'name' => $module . '/' . $controller . '/' . $action , 'status' => 1, 'desc' => $this ->get_cc_desc( $module , $controller , $action ) ); $i ++; } } } echo '<pre>' ; print_r( $data ); } /** * @cc 获取所有控制器名称 * * @param $module * * @return array|null */ protected function getController( $module ){ if ( empty ( $module )) return null; $module_path = APP_PATH . '/' . $module . '/Controller/' ; //控制器路径 if (! is_dir ( $module_path )) return null; $module_path .= '/*.class.php' ; $ary_files = glob ( $module_path ); foreach ( $ary_files as $file ) { if ( is_dir ( $file )) { continue ; } else { $files [] = basename ( $file , C( 'DEFAULT_C_LAYER' ). '.class.php' ); } } return $files ; } /** * @cc 获取所有方法名称 * * @param $module * @param $controller * * @ return array |null */ protected function getAction( $module , $controller ){ if ( empty ( $controller )) return null; $content = file_get_contents (APP_PATH . '/' . $module . '/Controller/' . $controller . 'Controller.class.php' ); preg_match_all( "/.*?public.*?function(.*?)\(.*?\)/i" , $content , $matches ); $functions = $matches [1]; //排除部分方法 $inherents_functions = array (<span style= "color: #6a8759;" > '_before_index' <span style= "color: #cc7832;" >,<span style= "color: #6a8759;" > '_after_index' <span style= "color: #cc7832;" >,</span></span></span></span> '_initialize' , '__construct' , 'getActionName' , 'isAjax' , 'display' , 'show' , 'fetch' , 'buildHtml' , 'assign' , '__set' , 'get' , '__get' , '__isset' , '__call' , 'error' , 'success' , 'ajaxReturn' , 'redirect' , '__destruct' , '_empty' ); foreach ( $functions as $func ){ $func = trim( $func ); if (!in_array( $func , $inherents_functions )){ if ( strlen ( $func )>0) $customer_functions [] = $func ; } } return $customer_functions ; } /** * @cc 获取函数的注释 * * @param $module Home * @param $controller Auth * @param $action index * * @return string 注释 * */ protected function get_cc_desc( $module , $controller , $action ){ $desc = $module . '\Controller\\' . $controller . 'Controller' ; $func = new \ReflectionMethod( new $desc (), $action ); $tmp = $func ->getDocComment(); $flag = preg_match_all( '/@cc(.*?)\n/' , $tmp , $tmp ); $tmp = trim( $tmp [1][0]); $tmp = $tmp != '' ? $tmp : '无' ; return $tmp ; } } |
其中注释必须采用固定格式,
/** * @cc index主页面 */
适用于ThinkPHP 3.2.2 ,适合用auth 认证时,直接提取所有的控制器及方法名,可以获取注释。非常方便。
参考:
1、http://www.thinkphp.cn/code/718.html
2、http://www.thinkphp.cn/topic/10357.html