Php Symfony 4-.env变量不可用
我在这里碰到一堵砖墙。到目前为止,symfony4的一切都是阳光和雏菊,但现在我似乎无法在我的项目中添加任何环境变量 在我的项目根目录中,有一个默认的.env文件,其中填充了常用的APP_env、APP_SECRET和DATABASE_URL;太好了。然而,在那里添加任何自定义变量似乎实际上并没有什么作用!例如,如果我添加另一个_VAR=hello_world,然后运行bin/console debug:container-env vars,它只转储APP_SECRET和DATABASE_URL变量。但是,如果我运行bin/console about,它会显示.env中的所有变量 我认为这可能是一个缓存变量问题,但如果我更改APP_SECRET的值并再次运行console命令,它会转储更改后的值,但仍然不是我的自定义变量 我怀疑默认情况下容器不能使用env变量,但我觉得这似乎不对,而且这似乎与容器本身所说的有些矛盾Php Symfony 4-.env变量不可用,php,symfony,environment-variables,symfony4,Php,Symfony,Environment Variables,Symfony4,我在这里碰到一堵砖墙。到目前为止,symfony4的一切都是阳光和雏菊,但现在我似乎无法在我的项目中添加任何环境变量 在我的项目根目录中,有一个默认的.env文件,其中填充了常用的APP_env、APP_SECRET和DATABASE_URL;太好了。然而,在那里添加任何自定义变量似乎实际上并没有什么作用!例如,如果我添加另一个_VAR=hello_world,然后运行bin/console debug:container-env vars,它只转储APP_SECRET和DATABASE_URL
例如,我需要做些什么来注册这些变量,以便在控制器中访问它们?就像我的典型情况一样,我在沮丧和寻求帮助的半小时内偶然发现了答案 与读取方式相反,仅将变量添加到.env文件不会使其在容器中可用,因此在运行bin/console debug:Container-env vars时也不会在控制器中使用$this->getParameter'envVAR'列出。现在想想,这有点道理,因为您不希望所有受保护的变量都可用于容器中运行的所有内容 为了访问环境变量,您需要首先对其进行参数化,这样您也可以限制对它的访问。 如果启用了自动连接,则可以在config/services.yaml文件中设置任何可用于所有服务的环境变量,如下所示:
parameters:
variable_a: '%env(VAR_A)%'
如果您希望将env var限制为几个服务,那么可以将其作为config/services.yaml中的参数插入到您的服务中,如下所示:
通过像上面那样设置参数,我现在可以使用$this->getParameter'variable_a'访问控制器中的环境变量。运行bin/console debug:container-env vars也会输出它
这有点痛苦,因为我认为简单地调用$this->getParameter'envBAZ'就可以了,但我认为这是有道理的,实际上没有名为envBAZ的参数
希望这能帮助其他人克服困难。就像我的典型情况一样,在沮丧和寻求帮助的半小时内,我偶然发现了答案 与读取方式相反,仅将变量添加到.env文件不会使其在容器中可用,因此在运行bin/console debug:Container-env vars时也不会在控制器中使用$this->getParameter'envVAR'列出。现在想想,这有点道理,因为您不希望所有受保护的变量都可用于容器中运行的所有内容 为了访问环境变量,您需要首先对其进行参数化,这样您也可以限制对它的访问。 如果启用了自动连接,则可以在config/services.yaml文件中设置任何可用于所有服务的环境变量,如下所示:
parameters:
variable_a: '%env(VAR_A)%'
如果您希望将env var限制为几个服务,那么可以将其作为config/services.yaml中的参数插入到您的服务中,如下所示:
通过像上面那样设置参数,我现在可以使用$this->getParameter'variable_a'访问控制器中的环境变量。运行bin/console debug:container-env vars也会输出它
这有点痛苦,因为我认为简单地调用$this->getParameter'envBAZ'就可以了,但我认为这是有道理的,实际上没有名为envBAZ的参数
希望这能帮助其他人解决这个问题。你可能想检查一下,这样你就不会在全局环境中设置APP\u ENV,终端:export,在大多数系统上,或者如果你在CMD:set中设置了APP\u ENV。@Anuga,我知道这不是问题,因为我可以毫无问题地编辑APP\u SECRET。我终于设法解决了我的问题,但是谢谢您可能想检查一下,这样您就没有在全局环境中设置APP_ENV,终端:export,在大多数系统上,或者如果您在CMD:set中设置了APP_ENV。@Anuga,我知道这不是问题,因为我可以编辑APP_SECRET而没有问题。我终于设法解决了我的问题,但是谢谢