有没有办法列出CodeIgniter实例的所有当前LOADED库和帮助程序?
而不是将每一个与$ this-> load-> is_loaded($ item)进行比较?
答案 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()
是一个很好的解决方案。