在开始之前我们应该注意应用的配置作为php脚本来保存。因此我们可以放置任何 有效的php代码 在里面,这会使配置更加 '智能' 而不是简简单单的放回值对(name-value pairs)。
首先我们创建 主(main) 应用配置并保存为 main.php 文件。这个文件应该包含所有在生产模式下必要的配置。
下面我们创建 开发(development) 应用配置并保存为 dev.php。因为开发的配置和主配置大部分相同,所有我们通过 继承 的方式来创建。我们使用 CMap::mergeArray 来实施继承。
代码中首先包含了main.php文件,并自定义了配置数组(例子中演示了数据库链接 DB connection 的配置)。然后返回两个配置合并后的结果作为最终的开发配置。注意我们在这没有使用php的函数array_merge()或array_merge_recursive()是因为它们不会已我们期望的方式去合并两个数组。
我们可以用同样的方式定义 测试 应用配置并保存为test.php
为了在不同的模式(生产、开发或测试)下运行程序我们应该在入口使用相对应的配置。为了防止在切换模式时修改入口文件的麻烦,我们可以为每个模式创建独立的入口。例如我们可以创建index.php,index-dev.php和index-test.php分别对应生产、开发和测试模式。在生产模式我们通过浏览器访问index.php,在开发模式访问index_dev.php,在测试模式访问index-test.php。
在团队开发中环境使用源码控制系统(如 SVN,CVS,GIT)来控制,每个开发者都希望有独立的应用配置(例如他们有不同的数据库连接)。所以在源码库中我们应该只保存 main.php 文件。每个开发人员的配置文件的其余部分只应保留在自己本地,以避免冲突。
Tip: 同样的方法也可以应用与其他基于PHP的配置。例如我们保存应用程序参数(通过Yii::app()->params方式访问)为一个 PHP 文件,我们可以使用上面的方法在不同的模式下自定义不同的参数