Laravel没有从不同的环境文件中读取环境变量

时间:2019-07-18 14:16:41

标签: php laravel laravel-5.8

从5.0升级到5.8后,如果env与.env文件不同,则laravel停止读取env变量。

例如,如果我有.env文件,其中包含USE_SSL=trueenv('USE_SSL')为真

但是如果我有.env文件指向另一个环境:

APP_ENV=dev

然后我将拥有包含.env.dev的{​​{1}}文件,USE_SSL=true将为空。

  1. 我尝试了env('USE_SSL')composer dump-autoload,以及php artisan config:clear-真不走运。是否缓存,我无法获取该值。
  2. 我尝试命名.dev.env和.env.dev文件-祝您好运。

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

我将其添加为答案,但是请注意,根据laravel文档,该不是应该如何使用.env文件。由于某些限制,这只是我需要使用的一种方式,这些限制要求我为每个env使用不同的配置文件,并在运行时加载它。要正确使用.env文件,请检查docs

这是一种在运行时加载不同配置文件的方式,具体取决于APP_ENV指向的位置。我将其标记为已回答,因为它正在回答此特定问题。

.env

APP_ENV=specific_domain

.env.specific_domain

USE_SSL=true

Http / Kernel.php

public function __construct(Application $app, Router $router)
{
    parent::__construct($app, $router);

    $app_env = explode("=", file($app->environmentFilePath(), FILE_IGNORE_NEW_LINES)[0])[1];
    $app->loadEnvironmentFrom(".env.$app_env");

}

答案 1 :(得分:-1)

好的,如果您真的想这样做,

ContractRoles

在我的.env文件中,我提到了这一点,

Route::get('renderEnvChaining',function(){
    $myCustomEnv = parse_ini_file(base_path(env('CUSTOM_ENV')));
   return $myCustomEnv['USE_SSL']; // This will return true
});

现在我在默认的环境示例中,我将其放置

CUSTOM_ENV=.env.example

我刚刚发现.ini和.env遵循相同的值,所以我将.env文件解析为.ini文件,

尝试一下,我以前从未做过这件事,请在将其运行到生产服务器之前与其他开发人员联系

相关问题