我的思路是:

  1. 读取控制器文件夹下的所有 php 文件
  2. 获取父级的控制器的方法的不应该出现在每个控制器的路由中,所以需要排除父级控制器的方法
  3. 读取 控制器文件夹下的 php文件的类名和方法

下面的代碼是在控制器中的1個方法

 public function test(){
$controller_path = APPPATH . 'controllers/';
$controller_files = glob($controller_path.'*.php'); $ignore_controller_file_names = array(
'Welcome.php'
); if(count($ignore_controller_file_names) > 0){
foreach ($ignore_controller_file_names as $file_name){
$test_controller_file = array_search($controller_path.$file_name, $controller_files);
if($test_controller_file !== false){
unset($controller_files[$test_controller_file]);
}
}
} //router need ignore method form extend controller
$controller_parent_files = array(
array(
'file_path' => BASEPATH.'core/Controller.php',
'class_name' => 'CI_Controller',
),
//if have create MY_Controller.php in application/core folder
array(
'file_path' => APPPATH.'core/MY_Controller.php',
'class_name' => 'MY_Controller', ),
);
$ignore_methods = array();
if(count($controller_parent_files) > 0){
foreach ($controller_parent_files as $controller_parent_file){
include_once $controller_parent_file['file_path'];
$controller_methods = get_class_methods($controller_parent_file['class_name']);
foreach ($controller_methods as $method){
if(!in_array($method,$ignore_methods)){
$ignore_methods[] = $method;
}
}
}
} // $ignore_methods = array(
// //ignore CI_Controller get_instance method()
// '__construct',
// 'get_instance',
// //ignore MY_Controller's public/protected methods
// ); $echo_router = true;
$routers = array();
foreach ($controller_files as $controller_file){
include_once $controller_file;
$tmp_file_name = str_replace($controller_path,'',$controller_file);
$controller_name = lcfirst(str_replace('.php','',$tmp_file_name)); $class_methods = get_class_methods($controller_name);
foreach ($class_methods as $key=>$class_method){
if(in_array($class_method,$ignore_methods)){
unset($class_methods[$key]);
continue;
}
if($echo_router){
echo "{$controller_name}/{$class_method}<br/>";
} }
$routers[$controller_name] = array(
'class_name' => ucfirst($controller_name),
'class' => $controller_name,
'methods' => $class_methods
);
} ksort($routers); // echo "<pre>";
// print_r($routers);
// echo "</pre>";
}
References
  1. how to get all list of controllers and methods without MY_controller and Ci_controller methods in codeigniter?

Codeigniter 列出所有控制器和控制器的方法(类似路由列表)的更多相关文章

  1. springmvc2 一个控制器写多个方法(非注解方式)

    出处:http://blog.csdn.net/xuewenke/article/details/23895999 springmvc2 一个控制器写多个方法(非注解方式) 分类: spring 20 ...

  2. iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

    一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...

  3. iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期

    iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期 一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在stor ...

  4. laravel6.0控制器-资源控制器

    控制器:控制器用来处理业务的,不应该处理逻辑,如果是小项目可以把逻辑写到控制器里,大点的项目应该抽离出来业务处理层如下:services业务处理层:比如:获取值,验证值,异常捕获命名规则:控制器名:用 ...

  5. Jmeter(七)_if控制器+循环控制器+计数器控制接口分支

    最近查阅了一下网上关于if控制器的文章,大同小异,几乎找不到原创,于是决定自己写一篇 下午测试接口,遇到了一个审核的流程.逻辑很简单,就是审核不通过之后返回去继续修改再提交,然后再审核,直到通过为止. ...

  6. iOS:使用block进行类与类,控制器与控制器之间的传值

    介绍:在iOS中类与类,控制器与控制器之间传值的方式有多种,分别是:单例传值.代理传值.通知传值.block传值或者一些偏好设置也可以用来传值.... 每一种传值方式都有各自的优点和缺点,针对不同情况 ...

  7. 建立tracert路由列表的方法

    建立tracert路由列表的方法:电脑屏幕左下方 选择开始选项运行 输入 CMD在DOS命令行下输入:tracert (你的网站域名)   运行结果中如出现了“*     *     *    req ...

  8. 兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素

    用运行速度最优的方法从LinkedList列表里删除重复的元素,例如A->B->BB->B->C,返回A->B->BB->C. 考试的时候没完全想明白,考完又 ...

  9. python练习题,写一个方法 传进去列表和预期的value 求出所有变量得取值可能性(例如list为[1,2,3,4,5,6,12,19],value为20,结果是19+1==20只有一种可能性),要求时间复杂度为O(n)

    题目:(来自光荣之路老师)a+b==valuea+b+c=valuea+b+c+d==valuea+b+c+d+...=valuea和b....取值范围都在0-value写一个方法 传进去列表和预期得 ...

随机推荐

  1. 【转载】github 查找最火项目

    博主感觉这篇文章很有用,很方便所以转载过来学习学习. 原文链接地址https://www.cnblogs.com/poterliu/p/10634568.html 如何在github上查找star最多 ...

  2. rem_2

    html{ font-size:625%; } body{ font-size:0.16rem; }

  3. 56. Map(双列集合)

    在生活中有些数据是以映射关系存在的,也就是成对出现的,比如:老公  老婆(key-->value) 双列集合:-------------------| Map    如果是实现了Map接口的集合 ...

  4. mybatis 多表查询sql

    在使用spring,spring mvc,mybatis时,mybatis链接数据库做多表查询的时候,sql语句中直接使用left join等链接字符就可以 链接多个表,参数类型是parameterT ...

  5. idea创建Maven项目后启动报404

    这块的配置是

  6. Robot Framework:数据库操作

    robotframework 操作数据库,需要安装DatabaseLibrary库 pip install robotframework-databaselibrary Python操作不同的数据库, ...

  7. psql内部命令及对应sql语句

    \?: 查看所有帮助  \l: 查看所有数据库  SELECT d.datname as "Name",       pg_catalog.pg_get_userbyid(d.da ...

  8. 带头结点的双向循环链表----------C语言

    /***************************************************** Author:Simon_Kly Version:0.1 Date: 20170520 D ...

  9. 第一次安装hadoop记录

    需求是:安装hadoop连接远程hadoop文件系统.JDK和hadoop需要与集群版本一致 首先去官网下载hadoop http://archive.apache.org/dist/hadoop/c ...

  10. 机器学习技法笔记:Homework #7 Decision Tree&Random Forest相关习题

    原文地址:https://www.jianshu.com/p/7ff6fd6fc99f 问题描述 程序实现 13-15 # coding:utf-8 # decision_tree.py import ...