私はこの誤解を解釈しているかどうかはわかりませんが、私がいれば私を修正してください。私は、Code IgniterのLoaderクラスを使ってアプリケーション "package"をロードしています。ほとんどの場合、正常に動作しています。しかし、私を引きつけているのは、ビューパスがどのように動作しているか(または動作していないか)です。ドキュメント(http://codeigniter.com/user_guide/libraries/loader.html)でコードイグナイター2.0.3ローダーadd_package_pathビューカスケード
、それは言う:。
「デフォルトでadd_package_path()が表示パスがループスルーされていると呼ばれ、一致が検出されたら、そのビューがある場合は、パッケージのビューファイルのパスが設定されています
この場合、パッケージ内の名前の衝突による名前の衝突が発生し、誤ったパッケージが読み込まれる可能性があります。これを防ぐには、add_package_path()を呼び出すときにオプションの2番目のパラメータをFALSEに設定してください。
これは、彼らが与えるサンプルコードです:
$this->load->add_package_path(APPPATH.'my_app', TRUE);
$this->load->view('my_app_index'); // Loads
$this->load->view('welcome_message'); // Will not load the default welcome_message b/c the second param to add_package_path is TRUE
// Reset things
$this->load->remove_package_path(APPPATH.'my_app');
// Again without the second parameter:
$this->load->add_package_path(APPPATH.'my_app', TRUE);
$this->load->view('my_app_index'); // Loads
$this->load->view('welcome_message'); // Loads
)私はサンプルコードにタイプミスがあると思いますし、彼らがadd_package_pathへの2回目の呼び出し(にFALSEに渡すことを意味します。私の解釈は、あなたがFALSEを渡すと、パッケージのビューパスをスキップし、元のビューパスを使用する必要があるということです。
しかし、私が実際にFALSEで渡そうとすると、私はまだ外部パッケージからビューを取得しています(ビュー名は外部パッケージと現在のアプリケーションの両方に存在します)。
public function add_package_path($path, $view_cascade=TRUE)
{
$path = rtrim($path, '/').'/';
array_unshift($this->_ci_library_paths, $path);
array_unshift($this->_ci_model_paths, $path);
array_unshift($this->_ci_helper_paths, $path);
$this->_ci_view_paths = array($path.'views/' => $view_cascade) + $this->_ci_view_paths;
// Add config file path
$config =& $this->_ci_get_component('config');
array_unshift($config->_config_paths, $path);
}
何それがないことで、ビューのパスアレイの前にパッケージビューのパスを追加します:/system/core/Loader.phpでLoaderクラスを見てみると、これはadd_package_pathの定義は()でありますTRUEまたはFALSEの値。実際Loaderクラスでも、ビューをロードし_ci_load($ _ ci_data)と呼ばれる機能で、これはそれがで見てビューのパスを選択したセグメントである:
foreach ($this->_ci_view_paths as $view_file => $cascade)
{
if (file_exists($view_file.$_ci_file))
{
$_ci_path = $view_file.$_ci_file;
$file_exists = TRUE;
break;
}
if (! $cascade)
{
break;
}
}
それはもしように私には思えますadd_package_pathの2番目のパラメータがTRUEかFALSEかにかかわらず、ビューは外部パッケージに存在します(add_package_pathの呼び出しから配列のfromにあるため)。これに関する文書はあまり多くありません。このために報告されたバグ報告はありませんでした。ここでも、私の解釈は、add_package_path()に渡された2番目のパラメータがFALSEの場合、パッケージのビューパスをスキップする必要があるということです。私は_ci_load()で、カスケードのチェックの内側に休憩の代わりに続行する必要があり、それがファイルのチェックの前に来るべきだと思っています。
これは私が報告しなければならないバグですか、ここで間違った解釈をしていますが、機能が正常に動作していますか?
私は同じ問題があります。回避策を見つけることができましたか? –