0

CodeIgniter で次のようにする必要があります。

$this->load->model('Test_model');
$this->Test_model->....

私はただ欲しい:

$this->Test_model->...

すべてのモデルを自動ロードするのではなく、オンデマンドでモデルをロードしたい。「遅延読み込み」ロジックを に追加するにはどうすればよいCI_Controllerですか? __get()? どのようなロジックを追加する必要がありますか?

前もって感謝します!

PS 私の質問をCodeIgniter の遅延読み込みライブラリ/モデル/etcと混同しないでください- 私たちは異なるターゲットを持っています。

現在のソリューション

CI_Controller::__construct()(path system/core/Controller/) を次のように更新します

foreach (is_loaded() as $var => $class)
{
        $this->$var = '';
        $this->$var =& load_class($class);
}

$this->load = '';
$this->load =& load_class('Loader', 'core');

CI_Controller次に、新しいメソッドをクラスに追加します

public function &__get($name)
{
//code here from @Twisted1919's answer
}
4

1 に答える 1

3

以下はciでは機能しないようです(実際には、魔法の方法は機能しません)。他の人のための参照としてここに残します。

まあ、あなたの特定のケースでは、これはそれを行うはずです(MY_Controllerで):

public function __get($name)
{
    if (!empty($this->$name) && $this->$name instanceof CI_Model) {
        return $this->$name;
    }
    if (is_file(APPPATH.'models/'.$name.'.php')) {
        $this->load->model($name);
        return $this->$name;
    }
}

LE、2 回目の試行:

public function __get($name)
{
    if (isset($this->$name) && $this->$name instanceof CI_Model) {
        return $this->$name;
    }
    if (is_file($modelFile = APPPATH.'models/'.$name.'.php')) {
        require_once ($modelFile);
        return $this->$name = new $name();
    }
}

ただし、ヘルパー、ライブラリなどにも注意する必要があります。

于 2013-07-10T19:52:39.510 に答える