|
<?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