1

我在加载自定义.env.custom文件后遇到了这个问题AppServiceProvider

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文件中重新加载配置?

4

1 回答 1

0

有两种方法

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"));
于 2021-02-07T19:10:16.547 回答