从5.0升级到5.8后,如果env与.env文件不同,则laravel停止读取env变量。
例如,如果我有.env
文件,其中包含USE_SSL=true
。
env('USE_SSL')
为真
但是如果我有.env
文件指向另一个环境:
APP_ENV=dev
然后我将拥有包含.env.dev
的{{1}}文件,USE_SSL=true
将为空。
env('USE_SSL')
和composer dump-autoload
,以及php artisan config:clear
-真不走运。是否缓存,我无法获取该值。任何想法都会受到赞赏。
答案 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文件,
尝试一下,我以前从未做过这件事,请在将其运行到生产服务器之前与其他开发人员联系