Php 如何在codeigniter中获得没有MY_控制器和Ci_控制器方法的所有控制器和方法列表?

Php 如何在codeigniter中获得没有MY_控制器和Ci_控制器方法的所有控制器和方法列表?,php,codeigniter,Php,Codeigniter,在codeigniter中,如果没有MY_控制器和Ci_控制器方法,如何获取所有控制器和方法的列表 救救我 $this->load->helper('file'); $controllers = get_filenames( APPPATH . 'controllers/' ); foreach( $controllers as $k => $v ) {

在codeigniter中,如果没有MY_控制器和Ci_控制器方法,如何获取所有控制器和方法的列表

救救我

    $this->load->helper('file');
        $controllers = get_filenames( APPPATH . 'controllers/' );

                    foreach( $controllers as $k => $v )
                    {
                        if( strpos( $v, '.php' ) === FALSE)
                        {
                            unset( $controllers[$k] );
                        }
                    }

                    echo '<ul>';

                    foreach( $controllers as $controller )
                    {
                        echo '<li>' . $controller . '<ul>';

                        include_once APPPATH . 'controllers/' . $controller;

                        $methods = get_class_methods( str_replace( '.php', '', $controller ) );

                        foreach( $methods as $method )
                        {
                            echo '<li>' . $method . '</li>';
                        }

                        echo '</ul></li>';
                    }

                    echo '</ul>';
$this->load->helper('file');
$controllers=get_文件名(APPPATH.controllers/);
foreach($k=>v的控制器)
{
if(strpos($v,'.php')==FALSE)
{
未设置($k]);
}
}
回声“
    ”; foreach($controller作为$controller) { 回显“
  • ”.$controller.“
      ”; 包括_once APPPATH.“controllers/”.$controller; $methods=get_class_方法(str_replace('.php','$controller)); foreach($methods作为$method) { 回显“
    • ”.$method.“
    • ”; } 回音“
  • ”; } 回声“
”;
类不是从CI继承的控制器无法访问codeigniter函数

您必须使用get_instance()

例如


我没有正确理解你的问题。但我想你想做的是, 您希望获取应用程序/控制器目录中控制器的所有方法和类的名称。 但是,如果这些类是从application/core/MY_Controller中的MY_Controller继承(扩展)的,那么它也会出现在列表中。你想避免这样

如果是这种情况,请执行以下操作:

在第二个循环之前,即第行
foreach($controllers as$controller)
添加以下代码

include_once APPPATH . 'core/MY_Controller.php'; 
$MY_Ci_methods = get_class_methods("MY_Controller");
在第二个foreach循环之前,即第行
foreach($methods as$method){
添加这一行

$methods = array_diff($methods, $MY_Ci_methods);
希望这能解决你的问题

完整代码:

    $this->load->helper('file');
    $controllers = get_filenames( APPPATH . 'controllers/' );

                foreach( $controllers as $k => $v )
                {
                    if( strpos( $v, '.php' ) === FALSE)
                    {
                        unset( $controllers[$k] );
                    }
                }

            echo '<ul>';

                    // add these 2 line of code.
                    include_once APPPATH . 'core/MY_Controller.php'; 
                    $MY_Ci_methods = get_class_methods("MY_Controller");

                foreach( $controllers as $controller )
                {
                    echo '<li>' . $controller . '<ul>';

                    include_once APPPATH . 'controllers/' . $controller;

                    $methods = get_class_methods( str_replace( '.php', '', $controller ) );

                    // add this line also
                    $methods = array_diff($methods, $MY_Ci_methods);

                    foreach( $methods as $method )
                    {
                        echo '<li>' . $method . '</li>';
                    }

                    echo '</ul></li>';
                }

                echo '</ul>';`
$this->load->helper('file');
$controllers=get_文件名(APPPATH.controllers/);
foreach($k=>v的控制器)
{
if(strpos($v,'.php')==FALSE)
{
未设置($k]);
}
}
回声“
    ”; //添加这两行代码。 包括_once APPPATH.'core/MY_Controller.php'; $MY_Ci_methods=获取类方法(“MY_控制器”); foreach($controller作为$controller) { 回显“
  • ”.$controller.“
      ”; 包括_once APPPATH.“controllers/”.$controller; $methods=get_class_方法(str_replace('.php','$controller)); //再加上这一行 $methods=array_diff($methods,$MY_Ci_methods); foreach($methods作为$method) { 回显“
    • ”.$method.“
    • ”; } 回音“
  • ”; } 回声“
”`
可能重复您没有提到的问题此代码显示了使用CI_控制器和MY_控制器的所有方法,并重复。我只需要控制器文件夹控制器名称和方法。
    $this->load->helper('file');
    $controllers = get_filenames( APPPATH . 'controllers/' );

                foreach( $controllers as $k => $v )
                {
                    if( strpos( $v, '.php' ) === FALSE)
                    {
                        unset( $controllers[$k] );
                    }
                }

            echo '<ul>';

                    // add these 2 line of code.
                    include_once APPPATH . 'core/MY_Controller.php'; 
                    $MY_Ci_methods = get_class_methods("MY_Controller");

                foreach( $controllers as $controller )
                {
                    echo '<li>' . $controller . '<ul>';

                    include_once APPPATH . 'controllers/' . $controller;

                    $methods = get_class_methods( str_replace( '.php', '', $controller ) );

                    // add this line also
                    $methods = array_diff($methods, $MY_Ci_methods);

                    foreach( $methods as $method )
                    {
                        echo '<li>' . $method . '</li>';
                    }

                    echo '</ul></li>';
                }

                echo '</ul>';`