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);
}
}
}
?>
таким образом, вам никогда не нужно (сознательно) проверять, загружена ли модель или нет:)