laravel5 配置文件结构改造

laravel4的文件配置结构:

laravel5 配置文件结构改造_第1张图片
image.png

说明:上图中app.php文件再不同环境下都要重新定义,已经环境不同,需要的信息也不同。

这样做的好处:

  1. 配置结构清晰
  2. 方便版本管理
  3. 修改方便

坏处:

  1. 重复文件比较多
  2. 涉密信息公开化,不安全

laravel5的文件配置结构:

laravel5 配置文件结构改造_第2张图片
image.png

说明:laravel5 去掉了一个环境一个文件夹的配置模式,采用“.env”环境变量来管理不同环境下的信息,config目录中的文件调用.env的信息。也就是不同环境需要手动修改.env文件。

好处:

  1. 精简了配置文件数量
  2. .env不再版本控制中,信息安全

缺点:

  1. 线上信息修改更新很不方便,需要手动修改或覆盖

基于上边的因素,结合俩个版本的优点,改造配置文件结构,避免缺点,放大优点

laravel5 配置文件结构改造_第3张图片
image.png

上图是改造后的文件结构,config目录不发生变化,增减env目录,这里有不同的环境变量配置文件;.env文件只起到:定义当前环境,保存涉密信息

.env文件
APP_ENV=local

//local.env文件
#当前系统域名配置
APP_URL=http://www.domain.com
#调试模式开关配置
APP_DEBUG=true
#日志记录方式
APP_LOG=daily
#设置报错级别
APP_LOG_LEVEL=debug

//bootstrap目录下新建env.php文件
use Dotenv\Dotenv;
use Dotenv\Loader;

$_env_file = rtrim($app->environmentPath() , DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR. ".env";
$_env = array();
$fp = fopen($_env_file , "r");
if ($fp) {
    while (($buffer = fgets($fp, 4096)) !== false) {
        $buffer = trim($buffer);
        $_buffer = explode("=", $buffer);
        if (!$_buffer[0]){
            continue;
        }
        $_env[$_buffer[0]] = trim($_buffer[1]);
    }
    if (!feof($fp)) {
        die('[error] unexpected fgets() fail\n');
    }
    fclose($fp);
}

if (empty($_env['APP_ENV']) ) {
    die('[error] no .env environment');
}
//从配置路径中加载指定配置文件
$app->loadEnvironmentFrom($_env['APP_ENV'] . '.env')
    ->useEnvironmentPath(base_path('env'));
$dot_env = new Dotenv($app->environmentPath(), $app->environmentFile());
$lines_env = $dot_env->load();

$filePath = rtrim($app->environmentPath() , DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR. $app->environmentFile();
//通过加载器设置环境参数 APP_ENV, APP_HOST
$dot_loader = new Loader($filePath, true);
foreach ($_env as $key => $value) {
    //和.env文件中的配置比较,如果$lines_env有的直接忽略
    if (array_key_exists($key, $lines_env) ){
        continue;
    }
    $dot_loader->setEnvironmentVariable($key, $value);
}

//bootstrap目录下app.php文件添加下边内容

require_once __DIR__.'/env.php';

通过上边代码的改造部署,基本就可以使用了。未必是最完美的,主要看你怎么用了

你可能感兴趣的:(laravel5 配置文件结构改造)