Загрузить модель в библиотеку Codeigniter - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть этот кусок кода:

class MY_Language extends CI_Language {

   function MY_Language()
   {
       parent::CI_Language();        

       $CI =& get_instance();

       $CI->load->model('language_model');

       $languages = $this->language_model->get_languages();

       print_r($languages);
   }

}

Но я продолжаю получать «Фатальную ошибку: вызов неопределенной функции get_instance () в C: \ xampp \ htdocs \ application \ library \ MY_Language.php в строке 44». Есть идеи? Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 07 апреля 2010

Каркас создает объект Language до базового объекта CodeIgniter. Таким образом, в этот момент в коде вы еще не сможете использовать базовый объект. На самом деле, файл codeigniter / Base5.php еще не включен. Этот файл определяет функцию get_instance. Вот почему вы получаете именно эту ошибку.

Если вы посмотрите в файл codeigniter / CodeIgniter.php, вы увидите, что

$LANG =& load_class('Language');

предшествует

require(BASEPATH.'codeigniter/Base5'.EXT);

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

Исходя из вашего комментария ниже, я думаю вы сможете получить экземпляр БД следующим образом. Это было выкопано из функции базы данных класса Loader.

require_once BASEPATH.'database/DB'.EXT;
$db = DB('', false);
1 голос
/ 21 августа 2011

Стивен Керран Способ загрузки модели из библиотеки - это сложный путь. Вам просто нужно взять загруженную модель из экземпляра CI.

$languages = $CI->language_model->get_languages();

но сначала вам нужно сначала загрузить класс базы данных с обычной загрузкой или автозагрузкой.

$this->load->database(); or $autoload['libraries'] = array('database');

и если вы используете автозагрузку для загрузки своего экземпляра, вы должны расположить его в правильной последовательности.

$autoload['libraries'] = array('database', 'your_library_name');

с загруженной моделью в вашей библиотеке $CI->load->model('language_model'), вы фактически уже присоединяете свою модель к экземпляру CI. И вы можете легко получить его из экземпляра CI.

0 голосов
/ 07 марта 2016

Предположим, что ваш класс существует в папке application / library, а именно field_validation.php и другого имени класса, существующего в модели, а именно Fields_model.php.

вам нужно выполнить следующие шаги, создать публичное имя объекта $ ci в вашей библиотеке и в конструкторе библиотеки, выполнить следующие шаги.

  • Загрузить глобальный объект CodeIgniter ($ CI = & get_instance ()).

  • Из глобального объекта CodeIgniter вы можете получить доступ к своей модели ($ CI-> load-> модель ( 'Fields_model')).

  • Назначенный объект CodeIgniter для общедоступная переменная, вы можете получить доступ к функции модели с помощью ( $ This-> CI-> Fields_model-> applyValidation ()).

  • Следуйте примеру внизу.

     class FieldValidation {
    
              public $ci;
    
              public function __construct() {
                 $CI = & get_instance();
                 $CI->load->model('Fields_model');
                 $this->ci = $CI;
             }
    
            public function applyValidation(){
    
               $this->ci->Fields_model->applyValidation();
    
          }
        }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...