diff options
author | Andrey Andreev <narf@devilix.net> | 2016-01-04 11:34:14 +0100 |
---|---|---|
committer | Andrey Andreev <narf@devilix.net> | 2016-01-04 11:34:14 +0100 |
commit | 0b1efb38293416b13aee8d1d9505e97d2efade5f (patch) | |
tree | aff933520f6735cef86376348da26a51bab6fddb /system/core | |
parent | 6bb9170b2f19b5b327e5c6998cbce414c5d28b50 (diff) |
Fix #4350
Diffstat (limited to 'system/core')
-rw-r--r-- | system/core/Loader.php | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/system/core/Loader.php b/system/core/Loader.php index 18e4c5287..87f21b279 100644 --- a/system/core/Loader.php +++ b/system/core/Loader.php @@ -285,9 +285,39 @@ class CI_Loader { $this->database($db_conn, FALSE, TRUE); } + // Note: All of the code under this condition used to be just: + // + // load_class('Model', 'core'); + // + // However, load_class() instantiates classes + // to cache them for later use and that prevents + // MY_Model from being an abstract class and is + // sub-optimal otherwise anyway. if ( ! class_exists('CI_Model', FALSE)) { - load_class('Model', 'core'); + $app_path = APPPATH.'core'.DIRECTORY_SEPARATOR; + if (file_exists($app_path.'Model.php')) + { + require_once($app_path.'Model.php'); + if ( ! class_exists('CI_Model', FALSE)) + { + throw new RuntimeException($app_path."Model.php exists, but doesn't declare class CI_Model"); + } + } + elseif ( ! class_exists('CI_Model', FALSE)) + { + require_once(BASEPATH.'core'.DIRECTORY_SEPARATOR.'Model.php'); + } + + $class = config_item('subclass_prefix').'Model'; + if (file_exists($app_path.$class.'.php')) + { + require_once($app_path.$class.'.php'); + if ( ! class_exists($class, FALSE)) + { + throw new RuntimeException($app_path.$class.".php exists, but doesn't declare class ".$class); + } + } } $model = ucfirst($model); |