我是否可以使用本机codeigniter函数来判断某个模型是否已加载?可以用php class_exists()
来判断模型是否已被加载?
答案 0 :(得分:13)
我很想扩展CI_Loader
核心课程。 (见extending Core Class)
class MY_Loader extends CI_Loader {
function __construct()
{
parent::__construct();
}
/**
* Returns true if the model with the given name is loaded; false otherwise.
*
* @param string name for the model
* @return bool
*/
public function is_model_loaded($name)
{
return in_array($name, $this->_ci_models, TRUE);
}
}
您将使用以下内容检查给定的模型:
$this->load->is_model_loaded('foobar');
That strategy已被CI_Loader
类使用。
此解决方案支持CI的模型命名功能,其中模型可以具有与模型类本身不同的名称。 class_exists
解决方案不支持该功能,但如果您不重命名模型,则应该可以正常工作。
注意:如果您更改了subclass_prefix
配置,则可能不再是MY_
。
答案 1 :(得分:7)
最简单的解决方案是使用PHP函数 class_exists
http://php.net/manual/en/function.class-exists.php
例如。如果你想检查Post_model是否已被定义。
$this->load->model('post_model');
/*
a lot of code
*/
if ( class_exists("Post_model") ) {
// yes
}
else {
// no
}
最简单的是最好的..
答案 2 :(得分:4)
编辑:
您可以使用log_message()函数。
将它放在模型的构造函数(parent :: Model())
中log_message ("debug", "model is loaded");
不要忘记在config.php文件中将日志配置设置为调试模式
$config['log_threshold'] = 2;
并将system / logs目录权限设置为可写(默认CI将在此处创建日志文件)
或将日志目录设置在另一个目录
中$config['log_path'] = 'another/directory/logs/';
然后,CI将在目录中创建日志文件。根据需要监视日志文件。您可以获取调试消息,以查看您的模型是否已加载到日志文件中。
答案 3 :(得分:4)
甩掉Maxime Morin& Tomexsans写道,这是我的解决方案:
<?php
class MY_Loader extends CI_Loader {
/**
* Model Loader
*
* Overwrites the default behaviour
*
* @param string the name of the class
* @param string name for the model
* @param bool database connection
* @return void
*/
function model ($model, $name = '', $db_conn = FALSE) {
if (is_array($model) || !class_exists($model)) {
parent::model($model, $name, $db_conn);
}
}
}
?>
这样,您就不需要(有意识地)检查模型是否已加载:)