Конфигурация пакета Symfony

Я собираю свой первый пакет Symfony и по какой-то причине не могу заставить работать конфигурацию.

configuration.php

..........
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
$loader->load('custom.yml');
..........

custom.yml

bd_config:
version: 2

ConfigExtension.php

 $rootNode = $treeBuilder->root('bd_config');$rootNode->
children()
->integerNode('version')->end()
->end();

return $treeBuilder;

И я получаю эту ошибку

Нет расширения, способного загрузить конфигурацию для «bd_config» (в /Library/WebServer/symfony/src/BD/ConfigBundle/DependencyInjection/../Resources/config/custom.yml). Искал пространство имен «bd_config», не нашел ни одного

Что я делаю не так?

0

Решение

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

vendor_bundle

Если имя вашего комплекта в верблюжьем случае и состоит из более чем одного слова (кроме названия комплекта и поставщика), то оно содержит дополнительные символы _. Например: CompanySuperSymfonyBundle будет company_super_symfony,

После этого вы можете установить свою конфигурацию:

company_super_symfony:
version: 100

Treebuilder:

$rootNode->
children()
->integerNode('version')->end()
->end();

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

$container->setParameter('version', $config['version']);

И тогда, в вашем контроллере:

... = $this->container->getParameter('version');
1

Другие решения

Прежде всего, вы делаете это неправильно :).

  1. Ваш yml недействителен (отступ в 1 пробел)
  2. Configuration.php следует построить дерево (не расширение)
  3. *Extension.php загружает ресурсы (не дерево)

Может быть, это работает тогда, но я не знаю, если BDConfigBundle является b_d_config в yml. я хотел бы использовать BdConfig как имя и bd_config как корень yml.

Тогда я бы импортировать ваш YML в config.yml:

config.yml

imports:
- { resource: custom.yml }

BdConfigStoreExtension.php

class BdConfigStoreExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$bdConfigNode = $this->processConfiguration($configuration, $configs);
// ...
}
}

Надеюсь это поможет ;).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector