我知道我可以覆盖模板或扩展其他包的类。但我可以延长配置吗?我希望能够在DependenyInjection/AcmeExtension.php
的加载方法中从config加载其他命名空间,但我在任何地方都没有找到任何关于它的信息。
示例:
我有AcmeBundle,它在config中定义了以下内容:
acme:
a: 1
我想扩展这个包(在名为AwesomeAcmeBundle的新包中)并能够通过将它们添加到原始命名空间来定义另一个变量:
acme:
a: 1
b: 2
或将原始命名空间包装到新的命名空间并在其中添加新变量:
awesome_acme:
a: 1
b: 2
答案 0 :(得分:2)
我有类似的需求,我已通过以下方式解决了这些问题:
1)扩展父级的配置类
//FooBundle\DependencyInjection\Configuration.php
use DerpBundle\DependencyInjection\Configuration as BaseConfiguration;
class Configuration extends BaseConfiguration
{
public function getConfigTreeBuilder()
{
$treeBuilder = parent::getConfigTreeBuilder();
//protected attribute access workaround
$reflectedClass = new \ReflectionObject($treeBuilder);
$property = $reflectedClass->getProperty("root");
$property->setAccessible(true);
$rootNode = $property->getValue($treeBuilder);
$rootNode
->children()
...
return $treeBuilder;
}
}
2)创建实际可以处理新配置条目的自己的扩展
class FooExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
//custom parameters
$container->setParameter('new_param_container_name', $config['new_param_name']);
...
}
}
3)在app\config\config.yml
您可以在新的foo
属性集中使用derp
(作为父包)的所有参数以及您的任何新参数已在Configuration.php
中定义。
答案 1 :(得分:1)
如果您正在谈论.yml
,则可以使用
AcmeBundle
配置中的AwesomeAcmeBundle
配置
imports:
- { resource: path/to/AcmeBundles/config.yml }
然后覆盖您想要的参数。
Symfony在config_dev.yml
中使用framework/router
参数执行相同操作。
答案 2 :(得分:1)
imports:
- { resource: @YourBundle/Resources/config/services.yml }