Get all FUNCTIONS name from all CONTROLLERS in Codeigniter

前端 未结 1 990
梦毁少年i
梦毁少年i 2020-12-19 10:16

Hello I am trying to get all FUNCTIONS name from all CONTROLLERS in Codeigniter Well I am able to get all CONTROLLER names in array but am failed to get all functions of all

相关标签:
1条回答
  • 2020-12-19 10:27

    For avail list of all controller with its method use this library:

    <?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
    

    Save it in library folder

    Than load this library into your controller

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

    Now you will get all controller list with its method.

    if you have any question please ask me.

    0 讨论(0)
提交回复
热议问题