config 目录规范
一个“包”有自己的config目录,这里一般用来存放自定义配置的文件。
config里面可以有四个目录default、development、production、testing(没有可以自己新建)。
它们的含义分别是:
1.default :默认环境
2.development :开发环境
3.production :产品环境
4.testing :测试环境
它们的作用是什么呢。
下面进行说明:
首先我们提出一个问题:
我们开发的时候和产品环境以及测试的时候使用的配置一般是不一样的,特别是数据库信息。
那么怎么解决环境变化的时候,我们的配置文件不需要改动就能适应环境呢?
答:配置目录可以自动切换到对应环境即可。
当我们使用Sr::config('database_config')加载database_config.php这个配置文件。
会发生什么呢,Sr::config()方法会先去“当前环境”的目录里面去找database_config.php,
如果没有找到,就去“默认环境”default目录里面去找database_config.php。
那么我们只要在每个环境下配置一个对应环境的database_config.php配置文件即可,
当环境变化的时候自动加载对应环境目录下的配置文件。
提示:
“当前环境”可以通过入口文件里面进行设置,在入口文件里面我们可以看到下面的配置:
//设置运行环境
->setEnvironment(($env = (($cliEnv = Sr::getOpt('env')) ? $cliEnv : Sr::arrayGet($_SERVER, 'ENVIRONMENT'))) ? Sr::config()->getServerEnvironment($env) : Sr::ENV_DEVELOPMENT)
上面一句很长,什么作用呢?作用就是:
1.先看看是不是命令行模式而且指定了env环境参数,有就设置当前环境为$env参数的值
2.再看有没有$_SERVER['ENVIRONMENT']变量指定了环境参数,有就设置当前环境为$env参数的值
3. 1和2都没找到的话,setEnvironment设置的就是环境值:Sr::ENV_DEVELOPMENT
4. 1或者2找到了,就通过Sr::config()->getServerEnvironment($env)获取环境值。
5. $env的值可以是:development production testing
分别代表着:开发环境、产品环境、测试环境 ,
分别对应的config目录下面的:development目录、production目录、testing目录。
当我们通过setEnvironment设置了“当前环境”之后,Sr::config()方法会优先去“当前环境”的目录里面去找配置文件,
如果没有找到,就去“默认环境”default目录里面去找。
一般情况下如果我们的配置文件和环境无关,我们把文件放在default目录里面即可。