7

是否有可以用来判断某个模型是否已加载的本机 codeigniter 函数?可以使用 phpclass_exists()来判断模型是否已经加载?

4

4 回答 4

13

我很想扩展CI_Loader核心类。(见扩展核心类

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');

该策略已被CI_Loader班级使用。

此解决方案支持 CI 的模型命名功能,其中模型可以具有与模型类本身不同的名称。该class_exists解决方案不支持该功能,但如果您不重命名模型,应该可以正常工作。

注意:如果您更改了subclass_prefix配置,它可能不再是MY_

于 2013-02-19T03:00:15.393 回答
8

最简单的解决方案是使用 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
}

最简单的就是最好的。。

于 2015-06-14T11:13:25.427 回答
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 将在目录中创建日志文件。根据需要监视日志文件。您可以获取调试消息以查看您的模型是否已加载或不在日志文件中。

于 2013-02-19T01:13:58.737 回答
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);
        }
    }
}
?>

这样,您就不需要(有意识地)检查模型是否已加载:)

于 2013-12-20T11:55:18.910 回答