2011-10-13 48 views
1

我不確定是否我解釋這個錯誤,但請糾正我,如果我。我使用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()中檢查級聯應該是繼續而不是中斷,並且它應該在檢查文件之前。

這是一個我應該報告的錯誤還是我在這裏解釋錯誤的東西,並且該函數正常工作?

+0

我有同樣的問題。您是否設法找到解決方法? –

回答

1

此錯誤還存在錯字!第二個代碼示例中的第二個參數應該是FALSE。

我使用的解釋是:

如果第二個參數是TRUE,則該視圖將只從外部包加載。

如果第二個參數爲FALSE,那麼視圖將從外部軟件包或本地回購庫中加載,具體取決於它的發現位置(首先檢查外部軟件包)。這個想法是,如果它不在外部包中,搜索應該繼續在本地回購。