Расширение нескольких моделей в Codeigniter 2 - PullRequest
5 голосов
/ 15 ноября 2011

Как настроить CI2, чтобы разрешить расширение нескольких моделей?

Я могу получить его только для расширения одной модели (вставьте / application / core) с именем MY_Model (с учетом регистра)).

Чтобы выбрать модель для расширения, я делаю;в модели ..

require_once APPPATH.'core/MY_Another_model.php';
class Test_model extends MY_Another_model {
...
}

Я не могу найти, где в коде основной системы находится состояние, позволяющее расширять модели, называемые MY_Model.

Спасибо залюбая помощь.

Ответы [ 4 ]

9 голосов
/ 15 ноября 2011

Я пробовал способ Cubed Eye, и он работает, но вот еще один вариант:

Попробуйте добавить модель в файл autoload.php. Он может наследоваться от MY_Model (который наследуется от CI_Model), и любые дополнительные модели, которые вы загружаете, могут наследовать от него:

class Extended_model extends MY_Model {
    public function __construct()
    {
        parent::__construct();
        $this->load->model('Another_model');
    }
}

(модели / Extended_model.php)

class Another_model extends Extended_model {
}

(модели / Another_model.php)

РЕДАКТИРОВАТЬ: Я только что понял, что вы помещаете вашу расширенную модель в папку "core". Это необходимо только для классов, которые расширяют базовые классы CI_ * (т.е. MY_Controller, MY_Model, MY_Input и т. Д.). Если у вас есть модель, расширяющая MY_Model, поместите ее в свою модель / папку и не ставьте перед ней префикс "MY _".

4 голосов
/ 15 ноября 2011

Как я уже говорил в этом вопросе о контроллерах , вы просто поместили оба класса в один и тот же файл MY_Model.Этот файл используется как часть функции автозагрузки codeigniter, что означает, что он будет искать любые файлы с префиксом MY_ (или определенным в конфигурации).

Вам даже не нужно вызывать класс внутри MY_Modelпотенциально может называть его MY_Special_Model и иметь MY_Another_Model непосредственно под

1 голос
/ 24 ноября 2012

В конце концов вы можете попробовать этот взлом, используя функцию load_class:

Это расширение вашей модели:
приложение / ядро ​​/ Special_model_class.php:

class CI_Special_model_class extends CI_Model {...}

Имя файла php без префикса CI_, хотя сам класс с префиксом!

Модель на основе этого класса в папке models /:
приложение / модели / one_model.php:

class One_model extends CI_Special_model_class {...}

Чтобы сделать это, вам нужно вызвать функцию load_class с контроллера:
приложение / контроллеры / one_ctrl.php

....
load_class('Special_model_class', 'core');
$this->load->model('Special_model_class');
....

В конце концов, вы можете попытаться вызвать load_class внутри модели, прямо перед ее определением. приложение / модели / one_model.php:

load_class('Special_model_class', 'core');
class One_model extends CI_Special_model_class {...}
0 голосов
/ 07 февраля 2013

Вот класс родительской модели:

class MY_Common_Model extends CI_Model {

    function __construct() {
        parent::__construct();
    }
        function drop_table($table_name) {
        $this->connect();
         $this->dbforge->drop_table($table_name);

    }

}

Вот класс дочерней модели:

class MY_Model extends MY_Common_Model {
     function inset_table($table_name) {
        $this->connect();
        $this->insert_table($table_name);

    }
}

в модели:

 $this->drop_table($edge_table);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...