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









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值