我不確定是否我解釋這個錯誤,但請糾正我,如果我。我使用Code Igniter的Loader類來加載應用程序「包」。它的大部分工作正常。然而,有一件事情讓我沮喪的是視圖路徑如何工作(或不工作)。代碼點火器2.0.3加載器add_package_path視圖級聯
在文檔(http://codeigniter.com/user_guide/libraries/loader.html),它說:
「默認情況下,add_package_path()被調用時,包裝查看的文件路徑設置瀏覽路徑,通過循環,一旦比賽中遇到這種觀點是。
在這種情況下,可能會發生命名包內的衝突,並且可能會加載不正確的包。爲了確保這一點,請在調用add_package_path()時設置可選的第二個參數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
我認爲這是在示例代碼一個錯字,他們的意思是在爲FALSE傳遞給第二次調用add_package_path()。我對此的解釋是,如果傳遞的是FALSE,則應跳過包的視圖路徑,並應使用原始視圖路徑。
但是,當我真的嘗試傳遞FALSE時,我仍然從外部包(視圖名稱存在於外部包和當前應用程序中)中獲取視圖。看着/system/core/Loader.php Loader類,這是()add_package_path的定義:
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);
}
它的作用是在封裝視圖路徑添加到視圖路徑數組的前部,與值爲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調用的數組的起始處),所以無論add_package_path中的第二個參數是TRUE還是FALSE,它都將被加載。這方面沒有太多的文檔,我沒有看到爲此提交的任何錯誤報告。同樣,我的解釋是,如果傳遞給add_package_path()的第二個參數是FALSE,則應該跳過包的視圖路徑。我在考慮在_ci_load()中檢查級聯應該是繼續而不是中斷,並且它應該在檢查文件之前。
這是一個我應該報告的錯誤還是我在這裏解釋錯誤的東西,並且該函數正常工作?
我有同樣的問題。您是否設法找到解決方法? –