2017-05-25 73 views
0

如何在codeigniter中没有MY_controller和Ci_controller方法的情况下获取所有控制器和方法的列表?如何在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>'; 
+0

的可能的复制[从笨所有控制器获取所有功能名称](https://stackoverflow.com/questions/35177864/get-all-functions-name-from-all -controllers-in-codeigniter) – DaYdReAmeR

+0

你没有提到这个问题 – inarilo

+0

这段代码显示了所有使用CI_Controller和MY_Controller的方法,也是重复的。我只需要控制器文件夹控制器的名称和方法。 – usman

回答

0

类没有从继承是CI_Controller无法访问笨功能

必须使用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'); 
    */ 
    } 

} 
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循环是前行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>';` 
相关问题