Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 4-.env变量不可用_Php_Symfony_Environment Variables_Symfony4 - Fatal编程技术网

Php Symfony 4-.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

我在这里碰到一堵砖墙。到目前为止,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变量,但我觉得这似乎不对,而且这似乎与容器本身所说的有些矛盾


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

就像我的典型情况一样,我在沮丧和寻求帮助的半小时内偶然发现了答案

与读取方式相反,仅将变量添加到.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而没有问题。我终于设法解决了我的问题,但是谢谢