You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel加载自定义.env文件后如何同步新环境变量到config配置

问题原因

Laravel 框架在启动阶段就会将所有 .env 中的环境变量读取并注入到配置容器中,后续手动加载新的 env 文件只会更新全局环境变量,不会自动同步到已经初始化完成的 config 配置中,因此会出现 env() 拿到新值、config() 仍返回旧值的情况。

解决方案

方法1:手动覆盖指定配置项(推荐)

如果只有少数配置需要更新,加载完env文件后手动赋值即可,性能开销最低:

$dotenv = \Dotenv\Dotenv::createMutable(base_path(), '.env.landlord');
$dotenv->load();

// 手动同步需要更新的配置项
config([
    'app.name' => env('APP_NAME'),
    // 其他需要更新的配置按格式补充即可,比如数据库配置
    'database.connections.mysql.database' => env('DB_DATABASE'),
    'database.connections.mysql.username' => env('DB_USERNAME'),
]);

方法2:重新加载全量配置

如果需要同步所有依赖环境变量的配置,可以重置配置容器重新加载所有配置文件:

$dotenv = \Dotenv\Dotenv::createMutable(base_path(), '.env.landlord');
$dotenv->load();

// 重置配置容器,重新加载所有配置
app()->instance('config', new \Illuminate\Config\Repository(
    // 已开启配置缓存时读取缓存文件
    require base_path('bootstrap/cache/config.php')
    
    // 未开启配置缓存时,逐文件加载config目录下的配置
    // collect(\File::glob(base_path('config/*.php')))->mapWithKeys(fn ($file) => [
    //     basename($file, '.php') => require $file
    // ])
));

注意:该方法会重置所有配置,包括你之前运行时动态修改的配置值,仅适合完全切换环境的场景。

注意事项

如果你的项目开启了配置缓存(执行过php artisan config:cache),Laravel 会直接读取缓存的配置文件,不会再读取任何.env文件,此时手动加载env文件无效,建议优先使用方法1手动覆盖配置。

内容的提问来源于stack exchange,提问作者Bálint Bakos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:57:02