为什么缓存配置文件时不使用 env() 帮助程序"strongly recommended"?



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')

相关内容

最新更新