Laravel从5.2升级到5.3的文档指定以下内容:
缓存和环境
如果在部署期间使用
config:cache
命令,则必须 确保env
仅从 配置文件,而不是来自应用程序的其他任何位置。如果从应用程序内部调用
env
,则建议向配置添加适当的配置值 文件并从该位置调用env
,允许您转换 您的env
调用配置调用。
文档没有回答的问题是:为什么?
在应用程序中使用时,env()
帮助程序是否仍应正常工作?缓存配置后我是否仍然不能使用env()
,而不是像文档(间接)建议的那样被迫在我的整个项目中找到它并用config()
助手替换它?
例如,如果我的应用程序中有这个.php:
'env' => env('APP_ENV', 'production')
它会用config:cache
缓存,但我仍然在代码中的某处使用env()
助手,那么有什么理由env('APP_ENV')
会给我除config('app.env')
之外的东西吗?
那么App::environment()
调用呢 - 在生产中使用config:cache
后是否也不建议使用它?
这是因为缓存在 Laravel 中的工作方式,当您使用命令时,您有一个storage/cache
文件夹,其中存储了配置文件的"编译"版本php artisan config:cache
,因此它更轻、更快。在该缓存过程中,Laravel读取.env
文件并使用env()
帮助程序函数替换所有值。
现在,要访问通常已经在内存中的配置的编译版本,您需要使用config()
助手,否则您将访问文件,这是一种慢得多的方法。
缓存配置后禁用env()
函数的原因是为了确保生产环境中的性能,因为假定这是进行编译的情况。
总之,这是创建者的决定,您可能喜欢与否,IMO 它使事情变得更干净,并迫使您拥有更优化和更有条理的应用程序。
希望这对你有帮助。
因为,所有的配置文件都缓存在bootstrap/cache/
中。使用config()
,而不是env()
。在像config/app.php
这样的配置文件中,您必须使用env()
.
例:
env('app.name') -> config('app.name')