我正在编写一个Symfony捆绑包,需要根据配置参数的值在Extension类中设置一个服务定义。
只要不尝试在参数值中使用任何表达式,它就可以正常工作。
我的扩展类如下:
class MyBundleExtension extends Extension
{
/**
* {@inheritdoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = $this->getConfiguration($configs, $container);
$config = $this->processConfiguration($configuration, $configs);
dd($config['custom_param']);
}
...
}
在我的应用程序中,我设置了这样的参数:
.env.local:
MY_BUNDLE_CUSTOM_PARAM=blah
config.yaml:
parameters:
my_bundle_custom_param: '%env(MY_BUNDLE_CUSTOM_PARAM)%'
my_bundle:
custom_param: '%my_bundle_custom_param%'
问题是,在Extension类中,这个参数还没有得到解决,所以dd()
显示的是:
"env_de85db6c4d65707d_MY_BUNDLE_CUSTOM_PARAM_71f5c271abfed252c958c82c1e3fb8dc"
而不是期望的CCD_ 2。
有什么方法可以在Extension类中获得参数的解析值吗?
您在评论中给出了正确答案:
/**
* @throws Exception
*/
public function load(array $configs, ContainerBuilder $container): void
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$resolve = $container->resolveEnvPlaceholders($config, true);
$config['upload_path'] = str_replace($_SERVER['DOCUMENT_ROOT'], '', $resolve['upload_directory']);
$container->setParameter("mybundle", $config);