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