在laravel 4中,我们有:

$env = $app->detectEnvironment(array(
    'local' => array('homestead')
));

默认情况下.

但在laravel 5中,它改为:

$env = $app->detectEnvironment(function()
{
    return getenv('APP_ENV') ?: 'production';
});

此外,他们还排除了.env.*行.现在,它已经:

.env

And added file .env.example:

APP_ENV=local
APP_KEY=SomeRandomString
DB_USERNAME=homestead
DB_PASSWORD=homestead

那么,如果我有2个以上的环境,我现在是否必须在单个.env文件中设置所有这些环境?例如:

APP_ENV=local
DB_PASSWORD=123

APP_ENV=alpha
DB_PASSWORD=456

如果我没有.env文件,laravel如何知道我使用的是什么环境?

推荐答案

You can do it exactly the same as in Laravel 4:

$env = $app->detectEnvironment(array(
    'local' => array('homestead')
));

*.env个文件只是用来放置不应该放入VCS的敏感数据.拉维尔4号也是如此

but is seems that in last days default detectEnvironment was changed to:

$env = $app->detectEnvironment(function()
{
    return getenv('APP_ENV') ?: 'production';
});

so you can use either setting variable from PC name or from ENV file.

如果在主环境文件(默认为.env文件)中使用基于环境的环境检测,则需要添加:

APP_ENV=local

Of course local here is local environment, you can change it into production or dev

目前,我看到的最重要的问题是,在进行生产时,您需要记住将这.env个文件内容从APP_ENV=local更改为APP_ENV=production,所以在我看来,更好的方法是基于PC名称的旧的默认方法.

现在是ENV文件.如果您使用基于ENV的环境检测,则应仅将以下内容放入您的ENV文件中:

APP_ENV=local

Now you can create separate ENV files for your different environments for example:

.local.env :

 MY_DB=testdb

.production.env:

MY_DB=productiondb

现在在bootstrap.environment.php个文件中,你可以修改:

if (file_exists(__DIR__.'/../.env'))
{
    Dotenv::load(__DIR__.'/../');
}

进入:

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');
    }   
}

从主环境文件加载基于APP_ENV的额外环境文件.

Now you will be able to use it in your other configuration file as always: $_ENV['MY_DB']

Laravel相关问答推荐

哈希:check()不返回预期结果Laravel 10

Laravel中的策略对我不起作用,这是我的代码

如何在Vite和Rollup中完全禁用分块?

按回车键时如何防止此功能运行?

工厂多对多数据透视表属性

Laravel:在行的子集上同步多对多

Laravel AppServiceProvider 中的代码在通过 DeployHQ 部署时停止 Composer 和构建

如何通过单击进入 vs 代码中的类

如何在 laravel 5.8 中显示自定义消息?

如何使用 Eloquent Laravel 更新集合

为什么我的 Laravel 队列作业(job)在 60 秒后失败?

需要 Vagrant 环境或目标机器

Laravel 5:在同一字符串上使用 bcrypt 给出不同的值

在 Eloquent 中按自定义顺序对集合进行排序

为什么在 Laravel 的 DB::select 中使用 DB::raw?

WhereHas Laravel 中的关系计数条件是什么

Composer RuntimeException - 无法加载软件包 mews/purifier

在 laravel 中删除排队的作业(job)

如何获取 Laravel 块的返回值?

phpunit 命令不适用于 Windows 7 上的 laravel 4