【发布时间】:2021-05-11 07:31:02
【问题描述】:
我在AppServiceProvider 中加载了我的自定义.env.custom 文件后遇到了这个问题:
class AppServiceProvider extends ServiceProvider
{
// ...
public function boot()
{
$host = request()->getHost();
// read domain based .env file, like: .env.example.com
$dotenv = \Dotenv\Dotenv::createMutable(base_path(), '.env.' . $host);
$dotenv->load();
}
}
(我也尝试了\Dotenv\Dotenv::createImmutable(),结果相同。)
然后在控制器中:
dd(
env('S3_ENDPOINT'),
Storage::disk('s3'),
);
env() 返回新值,但Storage::disk('s3') 包含旧值。
如何强制整个 Laravel 系统从 .env.custome 文件重新加载配置?
【问题讨论】:
-
您尝试
php artisan config:cache清除并重建配置缓存了吗?详情请见Laravel docs。 -
在加载环境后尝试做
Artisan::call('config:clear');,我认为你的新值没有加载到配置中 -
我有几个 .env 文件,每个文件都包含特定域的配置。在 Laravel 加载 .env 文件后,它应该重新加载主机名上的特定 env 文件(例如从此文件:.env.example.com)。
config:cache和config:clear是命令行工具,但我在运行时加载了我指定的 .env 文件。 -
为了节省时间,所有配置的缓存都是 laravel 保存的,所以 config/filesystems.php 中的 s3 值已经存储了,所以你需要清除缓存,就像我说的
Artisan::call('config:clear');你可以使用工匠类来清除配置,如果你不想使用Config::set('filesystems.disks.s3', put your env value here); -
我在
Dotenv::createMutable()代码之前尝试了Artisan::call('config:clear');,但没有任何改变。
标签: laravel laravel-8 phpdotenv