5.10 Класс Configuration

Для определения всех возможных конфигураций бандла используется класс Configuration, находящийся в файле /AcmeBundle/DependencyInjection/Configuration.php. Название класса на самом деле может быть любым, главное чтобы класс реализовывал интерфейс ConfigurationInterface.

class Configuration implements ConfigurationInterface
{
   public function getConfigTreeBuilder()
   {
       $treeBuilder = new TreeBuilder();
       $rootNode = $treeBuilder->root('name_of_bundle');
       $rootNode
        ->children()
            // Определение узлов конфигураций
        ->end()
       ;
       return $treeBuilder;
   }
}

В нём имеется один публичный метод: getConfigTreeBuilder(). Этот метод должен возвращать экземпляр класса TreeBuilder, который помогает вам в построении описания всех опций конфигурации, включая правила их валидаций.

Создание дерева настроек начинается с определения корневого узла:

$rootNode = $treeBuilder->root('name_of_bundle');

Название корневого узла должно быть названием бандла без “bundle” и в нижнем индексе с нижними подчеркиваниями. Корневой узел - это массив узлов. Узлов может быть сколько угодно:

$rootNode
    ->children()
        ->booleanNode('auto_connect')
            ->defaultTrue()
        ->end()
        ->scalarNode('default_connection')
            ->defaultValue('default')
        ->end()
->end()

Подробноее - http://symfony.com/doc/current/components/config/definition.html

Обычно объект класс Configuration используется внутри класса BundlenameExtension, которыйрасширяет базовый класс Extension, и располагается в файле /src/AcmeBundle/DependencyInjection/AcmeExtension.php. Его назначение - получение массивов конфигураций, которые также получает ядро Symfony из соответствующих конфигурационных YAML файлов.

class MatthiasAccountExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $processedConfig = $this->processConfiguration(
            new Configuration(),
            $configs
        );
    }
}

Метод processConfiguration() получает дерево конфигураций из объекта Configuration и обрабатывает полученные массивы.