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);
Проблема заключается в том, что show_error(...)
CodeIgniter отображает ошибку, а затем exit;
… Не круто … Итак, я переопредел: model(...)
-> my_model(..)
(вы получите ошибки, если вы просто переопределите его) и удалили show_error(...)
потому что по какой-то причине вы не можете переопределить его – странно для Codeigniter). Затем в my_model(...)
он сделал бросок Исключения
Мое личное мнение: вызывающая функция должна
return show_error("message");
где show_error возвращаетFALSE
— это или вы можете вывестиexit;
– и сделатьshow_error(...)
overridable
Вы можете увидеть, существует ли файл в папке моделей.
$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. Поэтому вопрос ОФ очень важен. Я хотел бы убедиться, что модель существует, прежде чем пытаться ее загрузить.