我正在尝试创建一个Symfony bundle。但是我无法读取在配置中使用的ENV变量。(它们只作为占位符加载) 我创建了一个配置树,其中包含一些值,我希望应用程序能够使用ENV变量。
应用程序的配置文件如下所示:
bundle_name:
config_value: "%env(NAME_OF_ENV_VALUE)%"
我的Bundle扩展类如下所示:
public function load(array $configs, ContainerBuilder $container): void
{
$loader = new XmlFileLoader(
$container,
new FileLocator(__DIR__.'/../Resources/config')
);
$configuration = new Configuration();
$loader->load('services.xml');
$config = $this->processConfiguration($configuration, $configs);
print_r($config);
}
print_r($config)
的结果如下:
[config_value] => env_NAME_OF_ENV_VALUE_2ae7ade5b0635007828f2e7e6765cd4d
此外,我遇到了以下异常:
EnvParameterException
环境变量“ENV_VAR_NAME”从未被使用。请检查您容器的配置。位于PhpDumper.php(第271行)。
现在,我的问题是
我该如何将(原来是一个ENV占位符)转换为实际的ENV变量值?
我尝试过的一些方法
我知道有一个ContainerBuilder->compile(true)
选项,它可以解析这些ENV变量。但我无法弄清楚应该把它放在我的bundle中的哪里。我尝试的所有方法都会出错。
我还知道有一个编译器Pass(Symfony\Component\DependencyInjection\Compiler\ResolveEnvPlaceholdersPass),根据名称(Resolve the env vars),它应该解析env变量,但是它什么也没做。我尝试将$container->addCompilerPass(new ResolveEnvPlaceholdersPass());
添加到我的Bundle类的build()方法中,但没有任何效果。
一些额外的信息
- 我正在使用Symfony 4,
- PHP 7.2,
- 在Mac OS和Windows 7上都测试过。
- ENV变量已正确加载。print_r($_ENV)显示了这一点。
%env(NAME_OF_ENV_VALUE)%
放在配置文件中就是使用ENV值。 但是,这正是导致错误的原因。 这就是我觉得困惑的地方。 我很想改进文档,但我对Symfony的了解还远远不足以做到这一点。 也许以后再说吧。 - milosa