Как унаследовать модель от другой модели в CodeIgniter - PullRequest
10 голосов
/ 04 июля 2011

Я использую codeigniter для своего проекта, и у меня есть эта модель класса, которую я называю Genesis, которая выглядит следующим образом:

class Genesis_model extends CI_Model {
    function __construct() {
        parent::__construct();
    }

    function get() {
        return 'human soul';
    }
}

, и у меня есть другая модель, хранящаяся в том же каталоге, которая расширяет Genesis_model

class Human_model extends Genesis_model {
    function __construct() {
        parent::__construct();
    }

    function get_human() {
        return $this->get();
    }
}

Human_model используется контроллером Human

class Human extends CI_Controller {     
    function __construct(){
        parent::__construct();
        $this->load->model('human_model');
    }       

    function get_human() {
        $data['human'] = $this->human_model->get_human();
        $this->load->view('human/human_interface', $data);
    }
}

, если я выполню код, он выдаст ошибку, которая указывает на return $ this-> get () .он гласит: «Неустранимая ошибка: класс« Genesis_model »не найден в ... \ application \ models \ human_model.php в строке 2».

Я использую этот метод, потому что почти все мои модели имеют почти идентичную структуру.Я собираю аналогичные функции в Genesis, в то время как другие модели служат только поставщиками данных, уникальными для таблиц, которые они представляют.это хорошо работает в моем asp.net (vb.net), но я не знаю, как это сделать в codeigniter.

есть ли способ для Human_model наследовать Genesis_model.я не думаю, что мне разрешено использовать include ('genesis_model.php') .я тоже не знаю, работает ли он.

заранее спасибо.

Ответы [ 5 ]

7 голосов
/ 05 июля 2011

Поместите файл genesis_model.php в основной каталог

6 голосов
/ 30 ноября 2013

core / MY_Model хорошо, если для ваших моделей есть только 1 важный суперкласс.

Если вы хотите наследовать не от суперкласса модели, лучше изменить конфигурацию автозагрузки.

В application / config / autoload.php добавьте следующую строку:

    $autoload['model'] = array('genesis_model');
4 голосов
/ 04 июля 2011

Измените вашу Human_model следующим образом:

include('genesis_model.php');
class Human_model extends Genesis_model {
    function __construct() {
        parent::__construct();
    }

    function get_human() {
        return parent::get();
    }
}

обратите внимание на функцию get_human и include.

1 голос
/ 01 сентября 2014

другое решение

<?php
$obj = &get_instance();
$obj->load->model('parentModel');
class childModel extends parentModel{
    public function __construct(){
        parent::__construct();
    }

    public function get(){
        return 'child';
    }
}
?>
1 голос
/ 04 июля 2011

Вы должны включить Genesis_model в ваш Human_model.php следующим образом:

include_once( APPPATH . 'folder/file' . EXT );

Или вы можете автоматически загрузить его в файл config / autoload.php, что я считаю глупым =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...