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

问题描述 投票:0回答:2

有没有办法列出 CodeIgniter 实例的所有当前加载的库和助手?

而不是用 $this->load->is_loaded($item) 来比较每一个 ??

class load helper codeigniter-3
2个回答
0
投票

这最好在 CodeIgniteir Core 本身内进行管理。因为它仔细检查映射到单例对象的库属性的实例,

CI_Controller
。这些库和助手由受保护的实例管理(分别为
$_ci_classes
$_ci_helpers

否则,您需要改进添加到单例对象中的内容。

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()
是一个很好的解决方案。


0
投票

我刚刚能够在 PHP 7.4 上运行的 CodeIgniter 3.1.11 中实现以下内容。

var_export(
    (fn() => $this->_ci_classes)->call($this->load)
);

这是一个“立即调用函数表达式”,它利用

call()
魔术方法”来访问
protected
_ci_classes
数组。

如果该房产具有

public
可见性,您只需致电
$this->load->_ci_classes

这将输出已加载库的关联数组,其中键是库对象别名,值是原始库名称。

您可能会看到类似以下内容:

array (
  'benchmark' => 'Benchmark',
  'hooks' => 'Hooks',
  'config' => 'Config',
  'log' => 'Log',
  'utf8' => 'Utf8',
  'uri' => 'URI',
  'router' => 'Router',
  'output' => 'Output',
  'security' => 'Security',
  'input' => 'Input',
  'lang' => 'Lang',
  'loader' => 'Loader',
  'AuthLib' => 'Auth',
  'session' => 'Session',
  'mongo' => 'Mongo_db',
  'SomeLib1' => 'SomeLib',
  'SomeLib2' => 'SomeLib',
  'SomeLib3' => 'SomeLib',
)

最后三个条目将像这样加载:

$this->load->library('SomeLib', null, 'SomeLib1');
$this->load->library('SomeLib', null, 'SomeLib2');
$this->load->library('SomeLib', null, 'SomeLib3');
© www.soinside.com 2019 - 2024. All rights reserved.