1. 程式人生 > >ci框架autoload機制,多專案配置共用molde、library、helper

ci框架autoload機制,多專案配置共用molde、library、helper

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/';