Symfony 4是否以某种方式在“产品”环境中保存或缓存了环境变量参数,还是在每次请求时都检索了它们?
我的问题是,当我使用Apache托管Symfony应用程序时,我需要使用VirtualHost
指令在SetEnv
配置中定义所有环境变量,以列出所有环境变量;而且我宁愿不必那样做。
我希望在使用PHP CLI时,我可以通过捕获或缓存参数来“编译” Symfony项目,以便在通过Apache运行应用程序时,它可以使用这些“缓存”参数。
这是可行的还是唯一的SetEnv
方法?
答案 0 :(得分:1)
Symfony使用the DotEnv component处理环境变量。
DotEnv组件读取.env
文件并将其内容加载到环境变量中。
.env
文件,则将首先加载该文件。如果没有没有 .env
个文件,但是存在.env.dist
个文件,则使用该文件代替它。 .env.local
文件,则现在将其加载。此文件永远不应提交到源代码存储库,并且其值覆盖先前文件中的值.env.$env.local
(或者不存在,但存在.env.$env
),则立即加载。同样,这些值将覆盖之前的值。这将填充所有已声明的环境变量,但不会覆盖现有的环境变量。读取.env
个文件会对性能造成影响,但是影响几乎可以忽略不计。
这些文件的加载取决于bootstrap.php
文件,该文件默认情况下是在public/index.php
和bin/console
上加载的;因此该方法可同时为 HTTP请求和控制台应用程序提供服务,因此您可以用来存储这些值,而不必在Apache配置中使用SetEnv
指令。
但是等等,还有更多...
在上面,you can dump all these variables into a PHP-optimised file是这样的,这样.env
文件不需要在每次请求时都进行解析。
为此,您只需执行:
composer dump-env prod
这将创建一个.env.local.php
文件。如果该文件存在,则以上任何内容都不会被读取。