2017-06-19 79 views
4

Laravel upgrade documentation从5.2到5.3规定如下:为什么强烈建议不要在缓存配置文件时使用env()助手?

缓存和ENV

如果您在部署过程中使用config:cache命令,必须 确保您只调用env功能从您的 配置文件中,而不是从您的应用程序的其他任何地方。

如果要调用从应用程序中env我们强烈 建议你在这个位置,而不是添加适当的配置值来配置 文件,并致电env,让你转换 您env呼叫配置电话。

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

不应该env()帮手,当使用内的应用,仍然正常工作?我不能在配置缓存后仍然使用env(),而不是被迫在我的整个项目中找到它并用config()帮助器替换它,这是由文档建议的(间接)?

举例来说,如果我有这在我的app.php

'env' => env('APP_ENV', 'production') 

,它会获取缓存与config:cache,但我还是用env()帮手某处代码,那么有没有什么原因是env('APP_ENV')会给我比config('app.env')别的东西吗?

App::environment()电话怎么样 - 正在使用它也不推荐config:cache用于生产?

回答

0

因为所有的配置文件被缓存在bootstrap/cache/。使用config(),而不是env()。在像config/app.php这样的配置文件中,您必须使用env()

例子:

env('app.name') -> config('app.name') 
2

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

现在,访问配置,这通常是已在内存中的编译版本,你需要使用config()帮手,否则你会被访问文件,更慢的方法。

缓存配置后禁用env()函数的原因是为了确保生产环境中的性能,因为它被认为是编译发生的情况。

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

希望这可以帮助你。

+0

嗨,我理解缓存的概念,它绝对好用,但真正的问题是:为什么文档在配置缓存后直接使用'env()'helper?背后的原因是什么?即使配置被缓存,'env()'helper仍然应该直接访问**。env **文件。如果是这样的话,使用'env()'有什么问题?如果真的没有,为什么它建议基本上找到所有'env()'出现并将它们交换为'config()'? – lesssugar

+0

@lesssugar这是因为'config:cache'是为了生产。是在这种环境下保证良好表现的一种方法。 – Asur

相关问题