Codeigniter:как я могу определить, загружена ли модель?

есть ли собственные функции codeigniter, которые я могу использовать, чтобы сказать, если определенная модель уже загружена? Может php class_exists() использоваться, чтобы сказать, если модель уже загружена?

4 ответов


у меня было бы искушение продлить 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, где модели могут иметь другое имя, чем сам класс модели. The class_exists решение не поддерживают эту функцию, но должно работать нормально, если вы не переименовываете модели.

Примечание: Если вы изменили свой subclass_prefix конфигурация, это может быть не


самое простое решение-использовать функцию 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
}

самый простой-лучший..


редактировать:

вы можете использовать функцию log_message ().

поместите это в конструктор вашей модели (parent::Model ())

log_message ("debug", "model is loaded"); 

не забудьте установить конфигурацию журнала в режим отладки в конфигурации.файл php

$config['log_threshold'] = 2; 

и установите разрешение каталога system / logs для записи (по умолчанию CI создаст файлы журналов здесь)

или установите каталог журналов в другом dir

$config['log_path'] = 'another/directory/logs/'; 

CI затем создаст файл журнала в справочник. контролируйте файлы журнала, как вам нравится. Вы можете получить отладочное сообщение, чтобы узнать, загружена ли ваша модель или нет в файлах журнала.


Риффинг от того, что написал 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);
        }
    }
}
?>

таким образом, вам никогда не нужно (сознательно) проверять, загружена ли модель или нет:)