【问题标题】:Symfony 4 - .env Variables Not AvailableSymfony 4 - .env 变量不可用
【发布时间】:2020-03-05 06:41:09
【问题描述】:

我在这里撞到了一堵砖墙。到目前为止,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 的值并再次运行控制台命令,它会转储更改后的值,但仍然不是我的自定义变量。

怀疑默认情况下容器无法使用 env var,但这对我来说似乎不正确(而且这似乎与 the Symfony docs 自己所说的有些矛盾)。

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

【问题讨论】:

  • 你可能想检查一下,所以你没有在全局环境中设置APP_ENV,终端:export,在大多数系统上,或者如果你在CMDset
  • @Anuga,我知道这不是问题,因为我可以毫无问题地编辑APP_SECRET。我最终设法找出了我的问题,但是谢谢! (:

标签: php symfony environment-variables symfony4


【解决方案1】:

按照我的典型情况,我在感到沮丧并寻求帮助后半小时内偶然发现了答案。

documentation 的读取方式相反,只需将变量添加到.env 文件并不能使其在容器内可用(因此在您运行bin/console debug:container --env-vars 时不会列出,也不会在使用$this->getParameter('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') 访问我的控制器中的那个环境变量。运行bin/console debug:container --env-vars 也会输出它。

这有点痛苦,因为我认为只需调用 $this->getParameter('env(BAZ)') 就可以解决问题,但我认为这是有道理的(实际上没有名为 env(BAZ) 的参数)。

希望这可以帮助其他人努力解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-02
    • 2018-08-17
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多