laravel env() function is used outside of config files. It always returns the default value if config is cached

laravel env() function is used outside of config files. It always returns the default value if config is cached

1. 核心结论(必记)

env() ​函数只能在 ​/config/*.php ​文件里使用!不能在控制器、模型、路由、业务代码里直接用 ​env('KEY')

2. 为什么缓存配置后 env() 只返回默认值?

因为:

  • 运行 php artisan config:cache
  • Laravel 会把所有 config 文件编译成一个缓存文件
  • 同时关闭 .env 加载
  • 所以​业务代码里的 ​env() ​全部失效​,只会返回你写的默认值

这是 Laravel 官方设计机制,不是 bug!

3. 正确用法(99% 的项目都应该这样)

步骤 1:在 config 文件里定义

例如 config/app.php

php

运行

'api_key' => env('API_KEY'),

步骤 2:在业务代码里用 config(),不要用 env()

// 错误 ❌(缓存后失效)
$key = env('API_KEY');

// 正确 ✅(永远有效)
$key = config('app.api_key');

4. 最常见错误示例

运行

// 控制器里这样写 = 找死
$secret = env('STRIPE_SECRET'); // 缓存后永远是 null

5. 一句话总结

env () = 只允许在 config 文件夹内使用config () = 业务代码全局使用

6.快速修复方法

  1. 全局搜索项目里的 env(
  2. 把所有不在 /config 目录下env() 都改成 config()
  3. 对应的值先写到 config 文件里

7.最终超级精简版

  • env() → 配置文件专用
  • config:cache → 会禁用 env ()
  • 业务代码只能用 config()
posted @ 2026-03-31 10:45  pine007  阅读(2)  评论(0)    收藏  举报