Как я могу использовать глубокую конфигурацию по умолчанию в symfony - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь создать пакет, который не требует файла конфигурации, но значения по умолчанию не работают.

Вот код:

    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder('acme_newsletter');

        $treeBuilder->getRootNode()
            ->children()
                ->arrayNode('security')
                    ->children()
                        ->scalarNode('foo_key')->defaultValue('%env(FOO_KEY)%')->end()
                        ->scalarNode('bar_key')->defaultValue('%env(BAR_KEY)%')->end()
                        ->scalarNode('baz_key')->defaultValue('%env(BAZ_KEY)%')->end()
                    ->end()
                ->end()
            ->end();

        return $treeBuilder;
    }

Теперь, когда я использую этот файл Symfony не будет использовать значения по умолчанию, если я не создаю хотя бы следующий файл конфигурации:

acme_newsletter:
   security:

Есть ли способ использовать значения по умолчанию, не требуя создания каких-либо файлов?

edit:

Я загрузил конфигурацию в классе расширений:

    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);
        $container->setParameter('acme_newsletter.config', $config);

        $loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
        $loader->load('services.yaml');
    }

1 Ответ

0 голосов
/ 24 февраля 2020

Конечно, можно создать конфигурацию по умолчанию. В соответствии с этой статьей

Вы должны загрузить класс конфигурации в расширении конфигурации следующим образом:

// src/Acme/SocialBundle/DependencyInjection/AcmeSocialExtension.php
public function load(array $configs, ContainerBuilder $container)
{
    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);
}

Помните, что 'новая конфигурация () 'это ваш класс связки с деревом конфигурации. Этот пользовательский класс может использоваться в вашем методе load () для объединения конфигураций.

Если вы хотите подготовить значения по умолчанию (а конфигурационного файла нет), используйте метод из arrayNode () Пример:

$rootNode
->arrayNode('children_one')
  ->addDefaultsIfNotSet() <- call this before children()
  ->children()
    ->integerNode('children_one_one')
       ->defaultValue(1)
    ->end()
  ->end()
->end()  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...