2

質問:

好奇心から、Codeigniter が特定のデータを常にビューにロードする方法を提供するかどうか疑問に思っています。

例:ビューをロードするたびにそのデータをロードするために呼び出すのではなく、すべてのページのビューの内部にアクセスできると便利なサイト情報を含む構成ファイルがあります。常にそれを含めることができますか?


<?php
    //Standard way
    function index() {

        $this->load->config('site_settings', true);
        $data['config'] = $this->config->item('site_settings');
        $data['fizz'] = 'buzz';

        $this->load->view('index', $data);
    }

    //Way I'd like to see
    function index() {
        $data['foo'] = 'bar';
        $this->load->view('index', $data); //$data already includes $data['config']
    }
?>

オプション1:

ある種の MY_Loader 拡張機能 - 既に MY_Controller があるため、MY_Loader クラスを実行して MY_Controller に CI_Loader の代わりにそれを呼び出させることはそれほど難しくありません。ただし、これが可能かどうかはわかりません。

オプション 2:

システムファイルを編集すればこれが可能であることは知っていますが、私はそれをしないことを本当に望んでいます. そのため、CI を更新するときに変更を追跡するのが難しくなります。

オプション 3:

???


考え?

明確化のために編集: これは特に、データをビューにロードし、ビューではなくモデルとコントローラーCI_Controllerからのみアクセスできるメンバー変数を拡張および設定するためのものです。

4

3 に答える 3

1

独自のコントローラ クラスで配列を初期化し、その配列にも追加できます。

Class MY_Controller extends CI_Controller {
    private $data = array();    
    function __construct()
    {
          parent::__construct();
          $this->data['config'] = $this->config->item('site_settings');
    }
}

それから:

Class foo extends MY_Controller {
 function index() {
    $this->data['fizz'] = 'buzz';
    $this->load->view('index', $this->data);
  }
}
于 2015-11-19T23:32:59.097 に答える
1
Class foo extends CI_controller{
     public $_site_settings;

     function __construct()
    {
          $this->_site_settings = $this->config->item('site_settings');
    }
}
于 2015-11-19T22:39:58.660 に答える