Symfony配置组件:数组原型和useAttributeAsKey

时间:2017-02-18 20:27:38

标签: php symfony configuration components

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

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

AFAIS,我需要在我的数组上使用useAttributeAsKey()方法来获取" site1"节点(" sites"节点可以处理多个站点,名称为key)。

我尝试以这种方式设置它,但我最终得到了一个不在NodeDefinition"中的" 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()

感谢您的回复, 尼古拉斯

1 个答案:

答案 0 :(得分: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
        ... : ...

要注意的两件事:

  • prototype('array')似乎在这种情况下将key作为属性处理。
  • 我使用PHPStorm,它使用PHPDoc提供信息,我目前有一个underlighted children()方法(在原型之后),表明我在原始问题中提到的警告。我稍后会深入挖掘,但这里看起来很乱。

This SO post向我展示了正确的方式,这也是official documentation

的建议

干杯,

尼古拉斯