为什么“强烈建议”在缓存配置文件时不使用env()帮助程序?

时间:2017-06-19 10:42:28

标签: laravel config

Laravel upgrade documentation从5.2到5.3指定以下内容:

  

缓存和环境

     

如果在部署期间使用config:cache命令,则必须   确保你只是在你的内部调用env函数   配置文件,而不是应用程序中的任何其他位置。

     

如果您在应用程序中呼叫env,那么就是强烈的   建议您为配置添加适当的配置值   文件并从该位置拨打env ,允许您进行转换   您的env来电拨打电话。

文档没有回答的问题是:为什么?

在应用程序中使用时,env()帮助程序是否仍然可以正常工作?在缓存配置后,我仍然不能使用env(),而不是被强制在我的整个项目中找到它并用config()帮助器替换它,因为(间接)由文档建议? / p>

例如,如果我在 app.php

中有此功能
'env' => env('APP_ENV', 'production')

它会被config:cache缓存,但我仍然在代码中的某处使用env()帮助器,那么有任何理由env('APP_ENV')会给我一些别的东西吗? config('app.env')

App::environment()调用 - 如果在生产中使用config:cache后也不建议使用它?

2 个答案:

答案 0 :(得分:3)

这是因为在Laravel中缓存如何工作,你有一个storage/cache文件夹,当你使用命令php artisan config:cache时,它存储了配置文件的“编译”版本,所以它更轻,更快。在该缓存过程中,Laravel读取.env文件并使用env()辅助函数替换所有值。

现在,要访问配置的编译版本(通常已经在内存中),您需要使用config()帮助程序,否则您将访问文件,这是一种更慢的方法。

缓存配置后禁用env()功能的原因是为了确保生产环境中的性能,因为假设是在进行编译的情况下。

总之,这是创作者的决定,你可能喜欢或不喜欢,IMO让事情变得更清晰,并迫使你拥有更优化和有组织的应用程序。

希望这会对你有所帮助。

答案 1 :(得分:0)

因为,所有配置文件都缓存在// Add 3 page views pageView.addPage(view1) pageView.addPage(view2) pageView.addPage(view3) // Show the 3rd page pageView.currentPage = 2 中。使用bootstrap/cache/,而不是config()。在env()之类的配置文件中,您必须使用config/app.php

示例:

env()