mil*_*osa 6 php environment-variables symfony symfony4
我正在尝试制作一个 Symfony 包。但是我无法读取我在配置中使用的 ENV 变量。(它们仅作为占位符加载)我创建了一个配置树,其中包含一些我希望应用程序与 ENV 变量一起使用的值。
应用程序配置文件如下所示:
bundle_name:
config_value: "%env(NAME_OF_ENV_VALUE)%"
Run Code Online (Sandbox Code Playgroud)
我的 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);
}
Run Code Online (Sandbox Code Playgroud)
结果print_r($config)如下:
[config_value] => env_NAME_OF_ENV_VALUE_2ae7ade5b0635007828f2e7e6765cd4d
Run Code Online (Sandbox Code Playgroud)
另外,我收到此异常:
环境参数异常
从不使用环境变量“ENV_VAR_NAME”。请检查您的容器的配置。在 PhpDumper.php 中(第 271 行)
现在,我的问题是
我如何(结果是ENV 占位符)转换为 ENV 变量的实际值?
我尝试过的一些事情
我知道有一个ContainerBuilder->compile(true)选项可以解决这些 ENV 变量。但我不知道我应该把它放在我的包里的什么地方。我试过的一切都会出错。
我也知道有一个 CompilerPass (Symfony\Component\DependencyInjection\Compiler\ResolveEnvPlaceholdersPass) 它(根据名称)应该解析环境变量,但这没有做任何事情。我尝试添加$container->addCompilerPass(new ResolveEnvPlaceholdersPass());到我的 Bundle 类的 build() 方法,但没有任何反应。
一些附加信息
@PavelAlazankin 差一点就成功了。环境值的实际评估确实要推迟到以后。
要克服“从未使用过”的错误消息,您需要在某个地方实际使用它。我认为这是一种防止拼写错误的保护措施。最简单的方法就是从中创建一个参数。
public function load(array $configs, ContainerBuilder $container)
{
print_r($configs);
// Makes the not used error go away
$container->setParameter('config_value',$configs[0]['config_value']);
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它会是这样的:
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);
$container->setParameter('config_value',$config['config_value']);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |