0

CIをレガシーアプリケーションに導入しようとしていますが、CIの外部にすでに存在するグローバルのいくつかを使用したいと思います。私はそれらを/CI/config/config.phpにロードし、ビューでこれを使用して取得しています:

$ this-> config-> item('myvar');

それはうまくいきます。ただし、globals.phpに格納されているグローバルにアクセスするsidebar.phpというモデルにサイドバーを含めると、未定義として表示されます。sidebar.phpはincludeステートメントを使用してglobals.phpからグローバルにアクセスすることに注意してください。また、グローバルはglobals.phpで次のように定義されています。$ myvar = "bla";

globals.phpとsidebar.phpはCIの外部にあります。これらの2つのファイルは関数を実行する必要はありません。

CIとそれに含まれるファイルが外部のグローバルにアクセスできるようにするトリックを知っている人はいますか?レガシーコードをあまり変更したくありません。

4

2 に答える 2

1

Codeigniterは、このような状況を解決するための便利なヘルパー関数を提供します。get_instance()関数はシングルトンオブジェクトを返すので、その多くのすばらしい機能にアクセスできます。以下は、これを行う方法の例です。

$ci =& get_instance();
$ci->config->item('varname');

これがドキュメントです。ライブラリ内のCodeIgniterリソースの利用というタイトルの下にリファレンスがあります

于 2013-02-08T16:58:16.057 に答える
0

レガシーコードがアクセスできなかった場所に、globals.phpファイルのinclude_onceステートメントが見つかりました。レガシーコードにはすでにinclude_onceステートメントがありましたが、他の場所にすでに含まれているため無視されました。

testfile.phpを開くと、CIでこれと同じように動作していると思います。

testfile.php:

include_once("globals.php");

function testf(){
  include("sidebar.php");
}

testf();

sidebar.php

include_once("globals.php");

echo $myvar; //fails
于 2013-02-09T00:41:49.660 に答える