Компонент конфигурации Symfony: прототип массива и использованиеAttributeAsKey

я использую Компонент конфигурации в автономном приложении PHP, и я хотел бы иметь в моем файле конфигурации структуру, подобную приведенной ниже:

sites:
site1:
ftp:
server: myserver
name: name
...: ...
database:
server: myserver
name: ....

AFAIS, мне нужен метод useAttributeAsKey () в моем массиве для узла «site1» (узел «sites» может обрабатывать несколько сайтов с именем в качестве ключа).

Я попытался настроить его таким образом, но в итоге я получил «метод детей не в NodeDefinition». Как правильно его настроить?

$rootNode
->children()
->scalarNode(self::REMANENCE_NODE[self::NODE_NAME])
->defaultValue(self::REMANENCE_NODE[self::NODE_DEFAULT_VALUE])
->info('Contains the backup folders max value to keep on defined storages')
->end()
->arrayNode(self::SITES)
->requiresAtLeastOneElement()
->useAttributeAsKey('name')
->prototype('array')
->children()
->arrayNode(self::DATABASE)
->end()
->arrayNode(self::FILES)
->end()
->end()
->end()

Спасибо за ваши ответы,
никола

0

Решение

Я наконец нашел хорошую конфигурацию:

$rootNode
->children()
->scalarNode(self::REMANENCE_NODE[self::NODE_NAME])
->defaultValue(self::REMANENCE_NODE[self::NODE_DEFAULT_VALUE])
->info('Contains the backup folders max value to keep on defined storages')
->end()
->arrayNode(self::SITES)
->requiresAtLeastOneElement()
->prototype('array')
->children()
->arrayNode(self::DATABASE)
->children()
->scalarNode(self::DATABASE_SERVER[self::NODE_NAME])
->defaultValue(self::DATABASE_SERVER[self::NODE_DEFAULT_VALUE])
->info('Contains the database server IP or name')
->end()

Это выше работает для следующей конфигурации:

configuration:
remanence: 5
sites:
site_1: # this is the attribute as key
database:
server: localhost
... : ...

2 вещи, на которые стоит обратить внимание:

  • Прототип (‘массив’), кажется, обрабатывает ключ как атрибут в этом случае.
  • Я использую PHPStorm, который предоставляет информацию с использованием PHPDoc, и в настоящее время у меня есть метод подсветки children () (после первого прототипа), указывающий на предупреждение, о котором я упоминал в исходном вопросе. Я буду копать глубже позже, но здесь, похоже, беспорядок.

Этот ТАК пост показал мне правильный путь, который также предлагает официальная документация

Ура,

никола

0

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

Других решений пока нет …

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