12

私は自分のプロジェクトに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);
    }
}

コードを実行すると、$ this-> get()を返すエラーが発生します。「致命的なエラー:クラス'Genesis_model'が2行目の...\ application \ models\human_model.phpに見つかりません」と表示されます。

ほぼすべてのモデルがほぼ同じ構造を共有しているため、この方法を使用します。Genesisで同様の機能を収集しますが、他のモデルは、それらが表すテーブルに固有のデータサプライヤとしてのみ機能します。それは私のasp.net(vb.net)でうまく機能しますが、codeigniterでそれを行う方法はありません。

Human_modelがGenesis_modelを継承する方法はありますか。include('genesis_model.php')の使用は許可されていないと思います。それがうまくいくかどうかもわかりません。

前もって感謝します。

4

5 に答える 5

8

モデルに重要なスーパークラスが1つしかない場合は、core/MY_Modelが適しています。

モデル以上のスーパークラスから継承する場合は、自動ロード構成を変更することをお勧めします。

application / config / autoload.phpに、次の行を追加します。

    $autoload['model'] = array('genesis_model');
于 2013-11-30T01:35:45.117 に答える
7

ファイルgenesis_model.phpをコアディレクトリに配置します

于 2011-07-04T20:36:48.880 に答える
5

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ください。

于 2011-07-04T13:02:04.960 に答える
2

次のように、Human_model.phpにGenesis_modelを含める必要があります。

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

または、config / autoload.phpファイルに自動ロードすることもできます。これは愚かなことだと思います=)

于 2011-07-04T12:45:25.950 に答える
2

他の解決策

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

    public function get(){
        return 'child';
    }
}
?>
于 2014-09-01T11:55:59.437 に答える