欢迎光临
感谢一路有你

thinkphp 5获取所有控制器的名称和方法

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 

方法

/**
      *获取某个目录下的php文件名的函数
      */
      function getControllers($dir) {
        $pathList = glob($dir . '/*.php');
        $res = [];
        foreach($pathList as $key => $value) {
            $res[] = basename($value, '.php');
        }
        return $res;
      }
      /**
      *获取某个控制器的方法名的函数
      *此方法过滤父级Base控制器的方法,只保留自己的
      */
      function getActions($className, $base='\app\admin\controller\Admin') {
        $methods = get_class_methods(new $className());//当前控制器方法
        $baseMethods = get_class_methods(new $base());//通用方法
        $res = array_diff($methods, $baseMethods);
        return $res;
      }

代码

public function ceshi()
    {
        //获取所有控制器
        $controllers = getControllers('../application/admin/controller');
//结果:
//   array (size=13)
//   0 => string 'Admin' (length=5)
//   1 => string 'Article' (length=7)
//   2 => string 'Config' (length=6)
//   3 => string 'Goods' (length=5)
//   4 => string 'Index' (length=5)
//   5 => string 'Login' (length=5)
//   6 => string 'Menu' (length=4)
//   7 => string 'Mysql' (length=5)
//   8 => string 'Order' (length=5)
//   9 => string 'Other' (length=5)
//   10 => string 'Upload' (length=6)
//   11 => string 'User' (length=4)
//   12 => string 'Wechat' (length=6)
        //下面是获取Index控制中你定义的方法,在mobadmin的应用场景中$control由前端传入,这样就能够达到我选择某个一个控制器的时候,就会输出这个控制中定义的方法。
        $control = 'Index';
        $actions = getActions('app\admin\controller' . '\\' . $control);
//结果:
// array (size=3)
//   0 => string 'index' (length=5)
//   1 => string 'welcome' (length=7)
//   2 => string 'ceshi' (length=5)

        //系统中所有控制的方法怎么获取呢?遍历所有控制器就可以。
        $controllers =  getControllers('../application/admin/controller');
        $actionsAll = [];
        foreach( $controllers as $key=>$value) {
            $actions[$value] =  get_class_methods('app\admin\controller' . '\\' . $value);
        }
//结果:
// 'Admin' => 
// array (size=15)
//     0 => string '__construct' (length=11)
//     1 => string '_initialize' (length=11)
//     2 => string '_empty' (length=6)
//     3 => string 'beforeAction' (length=12)
//     4 => string 'fetch' (length=5)
//     5 => string 'display' (length=7)
//     6 => string 'assign' (length=6)
//     7 => string 'engine' (length=6)
//     8 => string 'validateFailException' (length=21)
//     9 => string 'validate' (length=8)
//     10 => string 'success' (length=7)
//     11 => string 'error' (length=5)
//     12 => string 'result' (length=6)
//     13 => string 'redirect' (length=8)
//     14 => string 'getResponseType' (length=15)
// 'Article' => 
// array (size=18)
//     0 => string 'index' (length=5)
//     1 => string 'category' (length=8)
//     2 => string 'comment' (length=7)
//     3 => string '__construct' (length=11)
//     4 => string '_initialize' (length=11)
//     5 => string '_empty' (length=6)
//     6 => string 'beforeAction' (length=12)
//     7 => string 'fetch' (length=5)
//     8 => string 'display' (length=7)
//     9 => string 'assign' (length=6)
//     10 => string 'engine' (length=6)
//     11 => string 'validateFailException' (length=21)
//     12 => string 'validate' (length=8)
//     13 => string 'success' (length=7)
//     14 => string 'error' (length=5)
//     15 => string 'result' (length=6)
//     16 => string 'redirect' (length=8)
//     17 => string 'getResponseType' (length=15)

    }

 

 

 

赞(0) 打赏
未经允许不得转载:王明昌博客 » thinkphp 5获取所有控制器的名称和方法
分享到: 更多 (0)

相关推荐

  • 暂无文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

×
订阅图标按钮