CodeIgniter项目 环境配置

CodeIgniter项目 环境配置
先来看一个实际的例子,项目中存在这样一个配置文件:


$STATUS = 'normal'; //测试为test,正式为normal
$KEY_INFO = array(
    'a_test' => array(
        'key' => 'a_test_key',
        'value' => 'a_test_value'
    ),
    'a_normal' => array(
        'key' => 'a_normal_key',
        'value' => 'a_normal_value'
    ),
    'b_test' => array(
        'key' => 'b_test_key',
        'value' => 'b_test_value'
    ),
    'b_normal' => array(
        'key' => 'b_normal_key',
        'value' => 'b_normal_value'
    ),
);

生产环境和测试环境的开关通过$STATUS
变量来控制,而$STATUS定义和配置文件在同一个文件中,这意味着每次发布的时候都需要把这个值改成normal,测试的时候在调整回来,这样就无缘无故增加了发布的难度和错误产生的几率,每次提交的时候都得小心翼翼。产生该问题的主要原因就是把环境和配置没有分离开,环境和配置耦合在一个文件里了。很多时候我们写一个类的时候也会有类似的做法,将类需要配置的信息直接写死在属性中,不方便调整。
所以多环境的配置是十分有必要的,而Codeigniter框架是支持多环境配置的,环境的配置在index.php入口文件的第 21 行


/*
 *---------------------------------------------------------------
 * APPLICATION ENVIRONMENT
 *---------------------------------------------------------------
 *
 * You can load different configurations depending on your
 * current environment. Setting the environment also influences
 * things like logging and error reporting.
 *
 * This can be set to anything, but default usage is:
 *
 *     development
 *     testing
 *     production
 *
 * NOTE: If you change these, also change the error_reporting() code below
 *
 */
    define('ENVIRONMENT', 'development');

 

即CI开篇就定义了环境配置,那不同的环境配置会影响到哪些方面?
1、 报错机制。不同的环境设置的报错级别不同,如开发环境(development)会显示所有错误信息,而生成环境(production)则会屏蔽所有错误信息。
2、 加载的配置文件不同,从而实现多套环境配置。
在开发过程中会将数据库配置设置为测试服或本机,而生成环境下会修改为正式服。那这么多环境该如何设置?
先看看application目录下的config目录,该目录主要为系统的配置目录,如数据库配置、路由配置等。以数据库配置为例,当连接DB时,会读取 config/database.php 的配置文件,但这种情况是在没有自定义配置时。当我们定义ENVIRONMENT为development是,并创建config/development/database.php 时,系统会从此环境来读取数据库配置,而非 config/database.php
所以针对开发环境我们可以创建development目录,并将开发的配置文件放置于此目录下,创建production目录,用于发布时生产环境的配置,如下图所示:

注意:
对于个人定义的配置文件,若通过$this->load->config的方式加载,也适用多套环境,若是通过include加载则不行。