如何在Codeigniter上列出所有已加载的库和帮助程序?

时间:2016-06-21 21:20:57

标签: class load helper codeigniter-3

有没有办法列出CodeIgniter实例的所有当前LOADED库和帮助程序?

而不是将每一个与$ this-> load-> is_loaded($ item)进行比较?

1 个答案:

答案 0 :(得分:0)

最好在CodeIgniteir Core本身中进行管理。在仔细检查映射到Singleton对象CI_Controller的库属性的实例时。这些库和帮助程序由受保护的实例(分别为$_ci_classes$_ci_helpers)管理

否则,您将需要重新添加已添加到Singleton对象的内容。 CI_Controller包含$this共享实例的库,模型和加载器-因此,要识别是否加载了“库”是很棘手的。

    /**
     * Example Controller
    **/
    class Home Extends CI_Controller
    {
        public function __construct()
        {
            parent::__construct();
        }

        /*
         * Fetch a List of Non-core Libraries loaded at $this.
         *
         * @var array $ci_libraries
         */
        public function list_of_libraries()
        {
            $ci_libraries = [];
            foreach( (array) get_object_vars( $this ) as $libraryName => $classObj )
            {
                //Is it a Core Class?
                $className = get_class( $classObj );
                if ( stripos( $className, "CI_" ) === false && 
                     stripos( $className, "MY_" ) === false )
                {
                    $ci_libraries[$libraryName] = $className;
                }
            }

            return $ci_libraries;
        }

        /*
         * Fetch a list of included Helper files & strip out the .php extension
         *
         * @var array $ci_helpers
         */
        public function list_of_helpers()
        {
            $ci_helpers = array_filter( array_map(function( $file ){
                return stripos( $file, "_helper.php" ) !== false ? 
                     basename( $file, ".php" ) : false;
            }, get_included_files() ));

            return $ci_helpers;
        }   
    }

尽管正如我之前提到的-我确实认为这对您的原始问题而言是过度设计,但是$this->load->is_loaded()是一个很好的解决方案。