0

application/core/MY_Lang.php にコア クラスがあり、このクラスは CI_Lang クラスを拡張し、基本クラスのコンストラクターをオーバーライドします。

class MY_Lang extends CI_Lang {
    function __construct()
    {
        parent::__construct();
    }
}

クラスのコンストラクターからデータベース オブジェクトにアクセスする方法。

CI スーパー オブジェクトにアクセスしようとしましたが、今のところ CI_Controller クラスが読み込まれていません。

    if (class_exists('CI_Controller'))
    {
        $this->CI =& get_instance();
    }
4

2 に答える 2

2

わかりました。get_instance()を呼び出すことができなかったのは間違っていたようです。

しかし、post_controller_constructor「フック」を使用して関数を呼び出すことを提案する同様の投稿を見つけました

ここを参照してください:CodeIgniter:My_Lang内のget_instance

Code Igniterフックのドキュメントはここにあります:http://ellislab.com/codeigniter/user_guide/general/hooks.html

したがって、application / config/hooks.phpファイルに次のようなものを追加したいと思います。

$hook['post_controller_constructor'] = array(
                                'class'    => 'MY_Lang',
                                'function' => '__construct',
                                'filename' => 'MY_Lang.php',
                                'filepath' => 'core',
                                'params'   => array()
                                );

私はこれをテストしていませんが、うまく機能していない場合はお知らせください。適切なテストをまとめることができます。

もちろん、フックで指定する関数では、get_instance()を呼び出してから、データベースライブラリをロードし、必要な作業を実行します。

于 2012-11-03T19:55:54.280 に答える
0

を使用するだけ$this->CI =& get_instance();でよく、他のコードは必要ありません。if (class_exists('CI_Controller')) { ... }

$this->CI->load->viewこれにより、$this->CI-load->lang、 など の CI 呼び出しを使用できるようになります。

私は CI フックを使用したことがありませんが、これが必要であるとは思いませんし、状況に応じて必要であるとは思いません。正常に$this->CI =& get_instance();動作するはずです。

于 2012-11-04T06:52:24.183 に答える