2016-02-03 11 views
5

こんにちは私はCodeigniterのすべてのコントローラーからすべての機能名を取得しようとしています すべてのコントローラー名を配列で取得できますが、すべてのコントローラーのすべての機能を取得できません。私は関数を記述している現在のコントローラの関数名しか得ていません。私はそれが世界的に私は、ディレクトリのエラーを取得しようとした場合Codeigniterのすべてのコントローラーからすべての機能名を取得

は私が$class_methods=get_class_methods(new classname());

で関数名を取得しています。

$this->load->library('controllerlist'); 

print_r($this->controllerlist->getControllers()); 

今、あなたのコントローラにこのライブラリを使用すると、します負荷よりも保存

<?php 
if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 
/*** 
* File: (Codeigniterapp)/libraries/Controllerlist.php 
* 
* A simple library to list all your controllers with their methods. 
* This library will return an array with controllers and methods 
* 
* The library will scan the "controller" directory and (in case of) one (1) subdirectory level deep 
* for controllers 
* 
* Usage in one of your controllers: 
* 
* $this->load->library('controllerlist'); 
* print_r($this->controllerlist->getControllers()); 
* 
* @author Peter Prins 
*/ 
class ControllerList { 

    /** 
    * Codeigniter reference 
    */ 
    private $CI; 

    /** 
    * Array that will hold the controller names and methods 
    */ 
    private $aControllers; 

    // Construct 
    function __construct() { 
     // Get Codeigniter instance 
     $this->CI = get_instance(); 

     // Get all controllers 
     $this->setControllers(); 
    } 

    /** 
    * Return all controllers and their methods 
    * @return array 
    */ 
    public function getControllers() { 
     return $this->aControllers; 
    } 

    /** 
    * Set the array holding the controller name and methods 
    */ 
    public function setControllerMethods($p_sControllerName, $p_aControllerMethods) { 
     $this->aControllers[$p_sControllerName] = $p_aControllerMethods; 
    } 

    /** 
    * Search and set controller and methods. 
    */ 
    private function setControllers() { 
     // Loop through the controller directory 
     foreach(glob(APPPATH . 'controllers/*') as $controller) { 

      // if the value in the loop is a directory loop through that directory 
      if(is_dir($controller)) { 
       // Get name of directory 
       $dirname = basename($controller, EXT); 

       // Loop through the subdirectory 
       foreach(glob(APPPATH . 'controllers/'.$dirname.'/*') as $subdircontroller) { 
        // Get the name of the subdir 
        $subdircontrollername = basename($subdircontroller, EXT); 

        // Load the controller file in memory if it's not load already 
        if(!class_exists($subdircontrollername)) { 
         $this->CI->load->file($subdircontroller); 
        } 
        // Add the controllername to the array with its methods 
        $aMethods = get_class_methods($subdircontrollername); 
        $aUserMethods = array(); 
        foreach($aMethods as $method) { 
         if($method != '__construct' && $method != 'get_instance' && $method != $subdircontrollername) { 
          $aUserMethods[] = $method; 
         } 
        } 
        $this->setControllerMethods($subdircontrollername, $aUserMethods);          
       } 
      } 
      else if(pathinfo($controller, PATHINFO_EXTENSION) == "php"){ 
       // value is no directory get controller name     
       $controllername = basename($controller, EXT); 

       // Load the class in memory (if it's not loaded already) 
       if(!class_exists($controllername)) { 
        $this->CI->load->file($controller); 
       } 

       // Add controller and methods to the array 
       $aMethods = get_class_methods($controllername); 
       $aUserMethods = array(); 
       if(is_array($aMethods)){ 
        foreach($aMethods as $method) { 
         if($method != '__construct' && $method != 'get_instance' && $method != $controllername) { 
          $aUserMethods[] = $method; 
         } 
        } 
       } 

       $this->setControllerMethods($controllername, $aUserMethods);         
      } 
     } 
    } 
} 
// EOF 

ライブラリフォルダ

中:その方法を利用して、すべてのコントローラ、このライブラリの無駄リストについては

+0

あなたの偉大なライブラリのhttp://www.stackoverflow.com/questions/5919546/how-to-list-all-controller-class-name-in-codeigniter – devpro

答えて

3

そのメソッドですべてのコントローラリストを取得します。

ご不明な点がありましたら、私にお尋ねください。

+0

+1、感謝します。しかし、私は 'define( 'EXT'、 '.php');がクラスの外になければならない、そうでないとエラーundefined EXTを表示します。私は一度試しましたが、失敗しました。その行を追加した後で、コードが機能します(なぜそれが機能するのかわかりません) – poring91

+0

はい、この行はルートディレクトリのインデックスページに必要です。 –

関連する問題