laravel5已经设计了环境管理功能:
使用HTTP时只需要在apache或nginx中添加APP_ENV=环境名 即可,如果使用artisan 命令行方式只需要在命令中追加参数 --env=环境名 即可。但并未做到不同环境取不同配置的功能,需要额外增加代码即可。
在这里以 HTTP 方式做改动,满足不同环境取不同配置的目的,并且无需配置服务器的 APP_ENV 环境变量,以域名的后缀为准,去掉服务器的配置处理,并且可以提高环境区分的便捷性,需要要求不同环境域名后缀不同。
使用域名进行区分环境的好处是不同的后缀可以直观看出这是哪个环境。
以域名 www.laravel.com 为例:
域名要求如下:
本地环境: www.laravel.loc
开发合成环境:www.laravel.dev
测试环境: www.laravel.test
预发环境:www.laravel.pre
正式生产环境:www.laravel.com
其中开发合成与测试环境匀可以配置在公共路由上,方便大家都可以去使用。
增加代码:
在 public/index.php 入口文件中代码:
//环境处理 $env = substr(strrchr(env(‘HTTP_HOST‘), ‘.‘), 1); $envs = [‘loc‘ => ‘local‘, ‘dev‘ => ‘develop‘, ‘test‘ => ‘testing‘, ‘pre‘ => ‘pretest‘, ‘com‘ => ‘production‘]; Dotenv::setEnvironmentVariable(‘APP_ENV‘, $envs[$env]);
注意位置红色框为增加代码,绿色框为原代码,注意增加代码一定在绿色框代码上面。
在 bootstrap/app.php 文件中增加代码:
$app->loadEnvironmentFrom(env(‘APP_ENV‘) . ‘.env‘);
注意位置,这行代码可以满足 artisan 命令环境配置。
在框架的根目录下添加如下几个文件:内容可以直接复制 .env 文件
local.env
develop.env
testing.env
pretest.env
production.env
现在可以在任意controller中测试环境变量是否OK:
在不同的环境文件中修改配置: APP_KEY 的值。
var_dump(app()[‘env‘],env(‘APP_KEY‘));die;
注意:使用这种方式配置环境需要额外增加几个环境配置文件,当有一个在变动时,其它的几个就有可能需要跟着变动,如果几个环境中完全不会变的配置,就无需添加到环境配置中,使用这种方式配置的环境。
在调用 artisan 命令时如果命令中执行代码有涉及到环境,那么都需要添加上环境参数,如:
php artisan queue:listen --env=production
否则命令行会引用错误环境配置,导致程序异常。