php - Codeigniter में सभी नियंत्रकों से सभी कार्य का नाम प्राप्त करें



(1)

नमस्ते मैं Codeigniter में सभी नियंत्रकों से सभी फ़ंक्शन का नाम प्राप्त करने की कोशिश कर रहा हूं, लेकिन मैं सभी नियंत्रक नाम सरणी में प्राप्त करने में सक्षम हूं लेकिन सभी नियंत्रकों के सभी कार्यों को प्राप्त करने में विफल रहा हूँ मुझे केवल वर्तमान नियंत्रक के कार्य नाम मिले हैं जिसमें मैं फ़ंक्शन लिख रहा हूं।

मैं $class_methods=get_class_methods(new classname()); फ़ंक्शन नाम ला रहा हूं $class_methods=get_class_methods(new classname());

अगर मैं विश्व स्तर पर इसे कोशिश करता हूं तो मुझे निर्देशिका त्रुटि मिलती है।


सभी तरीकों की सूची के लाभ के लिए अपनी विधि के साथ इस पुस्तकालय का उपयोग करें:

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

इसे लाइब्रेरी फ़ोल्डर में सहेजें

अपने नियंत्रक में इस पुस्तकालय को लोड करने की तुलना में

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

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

अब आप अपनी विधि के साथ सभी नियंत्रक सूची प्राप्त करेंगे।

अगर आपके पास कोई सवाल है तो कृपया मुझसे पूछें





codeigniter