我们知道获取当前控制器的名称和方便在thinkphp中提高相应的函数,tp5中:
$c = request()->controller();
$a = request()->action();
还是非常方便的,但是今儿要分享的是获取系统中所有控制器的名称和方法,是“所有”而不是“当前”。
先说一下我的应用场景,我的mobadmin项目中RBAC权限中对于节点的管理,就需要获取所有的控制器和方法以便我及时的把新增的控制器和方法添加到数据库的节点表中。
如下图:
我们先来获取所有控制器:
/**
获取某个目录下的php文件名的函数
*/
function getControllers($dir) {
$pathList = glob($dir . '/*.php');
$res = [];
foreach($pathList as $key => $value) {
$res[] = basename($value, '.php');
}
return $res;
}
//根据thinkphp文件命名规则可以知道文件名和控制器的名称是一致的;
//根据thinkphp目录结构可以知道控制器目录的路径