Symfony 4-.env变量不可用

我在这里遇到一堵砖墙。到目前为止,Symfony 4的所有功能都充满阳光和雏菊,但是现在我似乎无法在项目中添加任何环境变量。

在我的项目根目录中,有一个默认的.env文件,其中填充了通常的APP_ENVAPP_SECRETDATABASE_URL;太好了。但是,在其中添加任何自定义变量似乎实际上并不会执行任何操作!例如,如果我添加了ANOTHER_VAR=hello_world,然后运行bin/console debug:container --env-vars,它只会转储APP_SECRETDATABASE_URL变量。但是,如果我运行bin/console about,它将显示.env内的所有变量。

我认为这可能是缓存变量问题,但是如果我更改APP_SECRET的值并再次运行console命令,它将转储更改后的值,但仍不是我的自定义变量。

怀疑,默认情况下容器不提供env var,但是这对我来说似乎不合适(而且似乎与the Symfony docs自己说的有些矛盾)。

我需要做什么来注册这些变量,以便可以在Controller内部访问它们?

mcsola1 回答:Symfony 4-.env变量不可用

像我一样,在沮丧并寻求帮助的半小时内,我偶然发现了答案。

documentation的读取方式相反,仅向.env文件中添加变量并不能使其在Container中可用(因此在您运行bin/console debug:container --env-vars时没有列出,也无法在容器中使用使用$this->getParameter('env(VAR)')的控制器。现在考虑一下,这有点有意义,因为您不希望 all 所有受保护的变量都可用于从Container运行的所有内容。

要访问env var,您需要先对其进行参数化,这样您就可以限制对它的访问。 您可以在config/services.yaml文件中设置所有希望用于所有服务的环境变量(如下所示)(假设启用了自动装配):

parameters:
   variable_a: '%env(VAR_A)%'

如果您希望将env var限制为仅几个服务,则可以将其作为config/services.yaml中的参数注入到服务中,如下所示:

services:
  App\Service\Foo:
    arguments:
      $bar: '%env(BAZ)%'

使用如上所述的参数设置,现在我可以使用$this->getParameter('variable_a')访问Controller内的env var了。运行bin/console debug:container --env-vars也会输出它。

这有点痛苦,因为我认为只需调用$this->getParameter('env(BAZ)')就能达到目的,但我想这是有道理的(实际上没有称为env(BAZ)的参数)。

希望这可以帮助其他挣扎着解决这个问题的人。

本文链接:https://www.f2er.com/3136718.html

大家都在问