如何在codeigniter中获取没有MY_controller和Ci_controller方法的所有控制器和方法列表?

时间:2017-05-25 06:47:35

标签: php codeigniter

如何在codeigniter中获取没有MY_controller和Ci_controller方法的所有控制器和方法列表???

帮帮我!!!!!!

    $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>';

2 个答案:

答案 0 :(得分:0)

不从CI_Controller继承的类无法访问codeigniter函数

您必须使用get_instance();

例如,

Class User
{
   function index()
   {
      $CI =& get_instance();
      $CI->load->library('database');
      $CI->load->view('something');

     /*
      this above code is equal to

      $this->load->library('database');
      $this->load->view('something');
     */
   }

}

答案 1 :(得分:0)

我没有正确理解你的问题。但我想你想做的是, 您希望在应用程序/控制器目录中获取控制器的方法和类的所有名称。 但是如果这些类是从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( $methods as $method ){之前的第二个foreach循环之前添加此行

$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>';`