Ser*_*a H 1 php environment-variables symfony symfony4
我在这里撞到一堵砖墙。到目前为止,Symfony 4 的一切都是阳光和雏菊,但现在我似乎无法向我的项目添加任何环境变量。
在我的项目根目录中,默认.env文件填充了通常的APP_ENV,APP_SECRET和DATABASE_URL; 太好了。但是,在那里添加任何自定义变量似乎实际上并没有做任何事情!ANOTHER_VAR=hello_world例如,如果我添加 in ,然后运行bin/console debug:container --env-vars,它只会转储APP_SECRET和DATABASE_URL变量。bin/console about但是,如果我运行,它会向我显示.env.
我认为这可能是一个缓存变量问题,但如果我更改的值APP_SECRET并再次运行控制台命令,它会转储更改后的值,但仍然不是我的自定义变量。
我怀疑默认情况下容器无法使用环境变量,但这对我来说似乎不正确(而且这似乎与 Symfony 文档本身所说的有些矛盾)。
例如,我需要做什么来注册这些变量,以便我可以在控制器内部访问它们?
正如我的典型情况一样,我在感到沮丧并寻求帮助的半小时内偶然发现了答案。
与文档的读取方式相反,简单地向.env文件添加变量并不能使其在 Container 内可用(因此不会在您运行时列出,bin/console debug:container --env-vars也不会在使用 的 Controller 内可用$this->getParameter('env(VAR)'))。现在想想,这有点道理,因为您不希望所有受保护的变量都可用于从容器运行的所有变量。
为了访问环境变量,您需要先对其进行参数化,这样您也可以限制对它的访问。您希望所有服务可用的任何环境变量都可以在config/services.yaml文件中设置,如下所示(假设启用了自动装配):
parameters:
variable_a: '%env(VAR_A)%'
Run Code Online (Sandbox Code Playgroud)
如果您希望将 env var 限制为仅几个服务,那么您可以将其作为参数注入到您的服务中,config/services.yaml如下所示:
services:
App\Service\Foo:
arguments:
$bar: '%env(BAZ)%'
Run Code Online (Sandbox Code Playgroud)
通过像上面那样设置参数,我现在可以使用$this->getParameter('variable_a'). 运行bin/console debug:container --env-vars也会输出它。
这有点痛苦,因为我认为简单地调用$this->getParameter('env(BAZ)')就可以解决问题,但我认为这是有道理的(实际上没有调用参数env(BAZ))。
希望这可以帮助其他人努力解决这个问题。
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |