Php Symfony配置组件:阵列原型和UseAttributesKey

Php Symfony配置组件:阵列原型和UseAttributesKey,php,symfony,configuration,components,Php,Symfony,Configuration,Components,我在一个独立的PHP应用程序上使用,我希望在我的配置文件中有一个类似以下的结构: sites: site1: ftp: server: myserver name: name ...: ... database: server: myserver name: .... 另外,我需要数组中“site1”节点的useAttributesKey()方法(“sites”节点可以处理多个站点,名称为key) 我试着用这种方式

我在一个独立的PHP应用程序上使用,我希望在我的配置文件中有一个类似以下的结构:

sites:
  site1:
    ftp:
      server: myserver
      name: name
      ...: ...
    database:
      server: myserver
      name: ....
另外,我需要数组中“site1”节点的useAttributesKey()方法(“sites”节点可以处理多个站点,名称为key)

我试着用这种方式设置它,但最终我得到了一个“不在nodededefinition中的children方法”。如何正确设置

$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()
谢谢你的回复,
尼古拉斯

我终于找到了好的配置:

$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
        ... : ...
上述操作适用于以下配置:

$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
        ... : ...
需要注意的两件事:

  • 在本例中,prototype('array')似乎将键作为属性处理
  • 我使用PHPStorm,它使用PHPDoc提供信息,目前我有一个underlighted children()方法(在prototype one之后),指示我在原始问题中提到的警告。稍后我会再深入挖掘,但这里似乎乱七八糟
告诉我正确的方法,这也是我的建议

干杯

尼古拉斯