Как настроить CI2, чтобы разрешить расширение нескольких моделей?
Я могу получить его только для расширения одной модели ( введите / application / core) с именем MY_Model (с учетом регистра).
Чтобы выбрать, какую модель расширить, я делаю; в модели ..
require_once APPPATH.'core/MY_Another_model.php'; class Test_model extends MY_Another_model { ... }
Я не могу найти, где в основном системном коде, где он указывает только на то, чтобы разрешить модели, которые продлеваются, называться MY_Model.
Спасибо за любую помощь.
Как я уже сказал в этом вопросе о контроллерах, вы просто помещаете оба класса в один файл MY_Model. Этот файл используется как часть функции автозагрузки codeigniter, что означает, что он будет искать любые файлы с префиксом MY_ (или конфигом).
Вам даже не нужно вызывать класс внутри MY_Model, вы можете назвать его MY_Special_Model и иметь MY_Another_Model прямо под ним
Я пробовал 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)
EDIT: Я просто понял, что вы помещаете свою расширенную модель в «основную» папку. Это необходимо только для классов, которые расширяют основные классы CI_ * (т.е. MY_Controller, MY_Model, MY_Input и т. Д.). Если у вас есть модель, расширяющая MY_Model, поместите ее в свои модели / папку и не префикс ее с помощью «MY_».
В конце концов вы можете попробовать этот хак, используя функцию 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 {...}
Вот родительский класс модели:
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);