Ответ 1
Вы можете увидеть, существует ли файл в папке моделей.
$model = 'my_model';
if(file_exists(APPPATH."models/$model.php")){
$this->load->model($model);
$this->my_model->my_fcn($prams);
}
else{
// model doesn't exist
}
bschaeffer's
ответьте на этот вопрос - в своем последнем примере:
$this->load->model('table');
$data = $this->table->some_func();
$this->load->view('view', $data);
Как вы справляетесь с этим, когда 'table'
не существует?
try {
$this->load->model('serve_' . $model_name, 'my_model');
$this->my_model->my_fcn($prams);
// Model Exists
} catch (Exception $e) {
// Model does NOT Exist
}
Но все же после запуска этого (видимо, модель не существует, но иногда она не работает) с ошибкой:
Обнаружена ошибка
Не удалось найти указанную модель: serve_forms
Я получаю вызов этой функции:
1) Получение некоторых JSON:
"model_1:{"function_name:{"pram_1":"1", "pram_2":"1"}}
2) И включите его в вызов функции:
$this- > load- > model ('serve_'. "model_1", 'my_model');
3) Когда я звоню:
$this->my_model->function_name(pram_1=1, pram_2=1);
Проблема заключается в том, что функция CodeIgniter show_error(...)
отображает ошибку, затем exit;
... Не круто... Итак, я переопредел: model(...)
→ my_model(..)
(вы получите ошибки, если вы просто переопределите его) и удалил show_error(...)
, потому что по какой-то причине вы не можете переопределить его - странно для Codeigniter). Затем в my_model(...)
он выбрал исключение
Мое личное мнение: вызывающая функция должна
return show_error("message");
, где show_error возвращаетFALSE
--- это или вы можете вынутьexit;
- и сделатьshow_error(...)
переопределение
Вы можете увидеть, существует ли файл в папке моделей.
$model = 'my_model';
if(file_exists(APPPATH."models/$model.php")){
$this->load->model($model);
$this->my_model->my_fcn($prams);
}
else{
// model doesn't exist
}
Возможно, эта вспомогательная функция поможет вам проверить, загружена ли модель или нет.
function is_model_loaded($model)
{
$ci =& get_instance();
$load_arr = (array) $ci->load;
$mod_arr = array();
foreach ($load_arr as $key => $value)
{
if (substr(trim($key), 2, 50) == "_ci_models")
$mod_arr = $value;
}
//print_r($mod_arr);die;
if (in_array($model, $mod_arr))
return TRUE;
return FALSE;
}
Не забудьте, что ваше приложение может использовать pakages. Эта вспомогательная функция просматривает все модели (даже в пакетах, включенных в ваше приложение CI).
if ( ! function_exists('model_exists')){
function model_exists($name){
$CI = &get_instance();
foreach($CI->config->_config_paths as $config_path)if(file_exists(FCPATH . $config_path . 'models/' . $name . '.php'))return true;
return false;
}
}
Приветствия
@Endophage Нет, вам не нужно явно указывать, какую модель вы загружаете. Они могут загружаться динамически. Пример:
$path = 'path/to/model/';
$model = 'My_model';
$method = '_my_method';
$this->load->model($path . $model);
return $this->$model->$method();
Таким образом, у вас может быть один контроллер, который использует URL или POST файлы.
Я использую эту концепцию много с вызовами ajax. Поэтому вопрос OP очень важен. Я хотел бы убедиться, что модель существует, прежде чем я попытаюсь загрузить ее.