在 Laravel 中重新加载自定义 .env 文件后如何更改存储设置?
Posted
技术标签:
【中文标题】在 Laravel 中重新加载自定义 .env 文件后如何更改存储设置?【英文标题】:How to change storage settings after reload custom .env file in Laravel? 【发布时间】: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');
,但没有任何改变。
【参考方案1】:
有两种方法
1。使用 Artisan 类清除缓存
但它会清除缓存并再次添加并需要一些时间。
$host = request()->getHost();
$dotenv = \Dotenv\Dotenv::createMutable(base_path(), '.env.' . $host);
$dotenv->load();
// clear it after loading the env
Artisan::call('config:clear'); // if gives error Artisan class not found then use \Artisan::call('config:clear');
2。设置特定的配置
更好的是,您不会只更改您想要更改的所有配置文件。将花费更少的时间。
$host = request()->getHost();
$dotenv = \Dotenv\Dotenv::createMutable(base_path(), '.env.' . $host);
$dotenv->load();
Config::set('filesystems.disks.s3', env("S3_ENDPOINT"));
【讨论】:
以上是关于在 Laravel 中重新加载自定义 .env 文件后如何更改存储设置?的主要内容,如果未能解决你的问题,请参考以下文章
关于Lumen / Laravel .env 文件中的环境变量是如何生效的
PHPUnit env中的Laravel自定义FormRequest