Ale*_*Kim 29 php laravel laravel-5 laravel-environment
在laravel 4中我们有:
$env = $app->detectEnvironment(array(
'local' => array('homestead')
));
Run Code Online (Sandbox Code Playgroud)
默认情况下.
但在laravel 5中,它改为:
$env = $app->detectEnvironment(function()
{
return getenv('APP_ENV') ?: 'production';
});
Run Code Online (Sandbox Code Playgroud)
此外,他们在.gitignore中排除了.env.*行,现在它已经:
.env
Run Code Online (Sandbox Code Playgroud)
并添加了文件.env.example:
APP_ENV=local
APP_KEY=SomeRandomString
DB_USERNAME=homestead
DB_PASSWORD=homestead
Run Code Online (Sandbox Code Playgroud)
所以,如果我有超过2个环境,我现在必须在一个.env文件中设置所有这些吗?例如:
APP_ENV=local
DB_PASSWORD=123
APP_ENV=alpha
DB_PASSWORD=456
Run Code Online (Sandbox Code Playgroud)
如果我没有.env文件,laravel将如何知道我正在使用的环境?
Mar*_*łek 30
你可以像在Laravel 4中那样完全相同:
$env = $app->detectEnvironment(array(
'local' => array('homestead')
));
Run Code Online (Sandbox Code Playgroud)
*.env
file仅用于放置不应放入VCS的敏感数据.Laravel 4也是如此
但似乎在最后几天默认的detectEnvironment被更改为:
$env = $app->detectEnvironment(function()
{
return getenv('APP_ENV') ?: 'production';
});
Run Code Online (Sandbox Code Playgroud)
所以你可以使用PC名称或ENV文件中的设置变量.
如果在主env文件中使用基于ENV的环境检测(默认情况下,.env
您需要添加:
APP_ENV=local
Run Code Online (Sandbox Code Playgroud)
当然local
这里是本地环境,你可以把它改成production
或dev
目前我看到的最重要的问题是你需要记住在进行生产时将这个.env
文件内容更改为APP_ENV=local
,APP_ENV=production
所以在我看来更好的方法是基于PC名称的旧默认方法.
现在ENV文件.如果使用基于ENV的环境检测,则应仅将其放入ENV文件中:
APP_ENV=local
Run Code Online (Sandbox Code Playgroud)
现在,您可以为不同的环境创建单独的ENV文件,例如:
.local.env:
MY_DB=testdb
Run Code Online (Sandbox Code Playgroud)
.production.env:
MY_DB=productiondb
Run Code Online (Sandbox Code Playgroud)
现在在bootstrap.environment.php
文件中你可以修改:
if (file_exists(__DIR__.'/../.env'))
{
Dotenv::load(__DIR__.'/../');
}
Run Code Online (Sandbox Code Playgroud)
成:
if (file_exists(__DIR__.'/../.env'))
{
Dotenv::load(__DIR__.'/../');
if (getenv('APP_ENV') && file_exists(__DIR__.'/../.' .getenv('APP_ENV') .'.env')) {
Dotenv::load(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env');
}
}
Run Code Online (Sandbox Code Playgroud)
APP_ENV
从主env文件加载额外的env文件.
现在,您可以像往常一样在其他配置文件中使用它: $_ENV['MY_DB']
Hir*_*ter 12
对于那些刚刚升级到5.2的人:
您不能再使用静态Dotenv::load()
方法.请改用以下内容:
$dotenv = new Dotenv\Dotenv(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env'); // Laravel 5.2
$dotenv->load();
Run Code Online (Sandbox Code Playgroud)
在bootstrap/app.php
.
//编辑Soo ..在深入挖掘过去一小时之后我不妨在这里添加一些额外的信息:
env()
帮助函数或直接通过PHP的本机getenv()
函数访问这些.env文件中的值.虽然您应该只填写配置文件(请参阅参考资料/config/*.php
),因为这些文件可以缓存.(new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
:由于它使用了已设置的任何环境值,因此不会被覆盖!(你必须使用这样做 - 这让我疯了,因为宅基地将变量设置为php-fpm配置而你无法通过.env文件更改它)load()
overload()
APP_ENV
local
/etc/php/7.0/fpm/php-fpm.conf
TestCase
,将APP_ENV
变量设置为测试(通过refreshApplication()
- 使用putenv()
覆盖默认local
值) 归档时间: |
|
查看次数: |
67502 次 |
最近记录: |