У меня были аналогичные потребности, и я решил их следующим образом:
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
.