ci框架autoload機制,多專案配置共用molde、library、helper
阿新 • • 發佈:2019-02-08
autoload:
進入ci框架核心目錄core
開啟load.php
找到_ci_autoloader方法
看到這樣一段話
// Autoload packages if (isset($autoload['packages'])) { foreach ($autoload['packages'] as $package_path) { $this->add_package_path($package_path); } //print_r($this->_ci_library_paths);exit;//阿猛測試用 }
這個陣列$autoload['packages']即是配置檔案中autoload.php中的配置,如:
$autoload['packages'] = array(BASEPATH.'../阿猛的共用專案library,model,helper');
這句話 就是自動載入一個目錄。再來看CI裡面的寫法。
自動載入包路徑:_ci_library_paths,_ci_model_paths,_ci_helper_paths,_ci_view_paths (CI的這4個路徑都會先到上面的包裡面去尋找)
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'); $config->_config_paths[] = $path; return $this; }
在這裡加個斷點,列印下。可以看到載入情況。
Array
(
[0] => D:/x/web/framework/../lm/ //這句即是新配置的自動載入包
[2] => D:\x\web\manage\application\
[3] => D:/x/web/framework/
)
簡而概之:
我們在控制器中load載入當前專案的library或者model又或者helper。
我想先從其他專案中載入這些類或helper。這時就需要用到上面的自動載入包路徑功能
舉例說明:
/專案A---------------------目錄同CI專案完全一樣
/專案B
/framework
/lm_autoload
其中lm_autoload是自動載入包路徑,內容包括:
/lm_autoload/librarys
/lm_autoload/model/user_model.php
/lm_autoload/helper
這時我們在專案A和專案B都想呼叫共同的user_model類,就很方便的能做到了。
$this->load->model('user_model');//這裡他們都會先去查詢‘自動載入包路徑’
同時也可以只調用自己專案下的包路徑。而互不影響。我覺得這也是CI配置多專案的好方法。
配置多專案時,每個專案下的index.php檔案需要修改下共用核心框架目錄:
index.php
$system_path = '../framework/';