【问题标题】:Symfony configuration tree builderSymfony 配置树构建器
【发布时间】:2016-09-21 08:03:22
【问题描述】:

我一直在尝试使用 Symfony 3 进行树构建器配置来解析这样的配置:

my_bundle:
    import:
        paths:
            - 'some/path'
            - 'another/path'

我的 TreeBuilder 如下所示:

$rootNode
    ->children()
        ->arrayNode('import')
            ->children()
                ->arrayNode('paths')
                    ->addDefaultsIfNotSet()
                    ->defaultValue([])
                    ->cannotBeEmpty()
                ->end()
            ->end()
        ->end()
    ->end();

它基本上就像我想要得到的二维数组配置。各位大神能帮我解答一下吗?

预期的解析配置:

['import' => ['paths' => ['some/path', 'another/path']]]

【问题讨论】:

  • 那么你会得到什么?
  • ->defaultValue() is not applicable to concrete nodes at path "my_bundle.import.paths"
  • 你想归档什么样的行为?为什么要同时申请cannotBeEmptydefaultValue([])[] 为空。
  • cannotBeEmpty 在这一点上无关紧要。它甚至可以编译为有效的配置树定义。我想要实现的是 paths 数组将在根数组上的 import 键下。

标签: php configuration symfony


【解决方案1】:

好像我忘了原型数据结构:

$rootNode
    ->children()
        ->arrayNode('import')
            ->children()
                ->arrayNode('paths')
                    ->prototype('scalar')->end()
                ->end()
            ->end()
        ->end()
    ->end();

【讨论】:

  • 是的,但在这种情况下它可能是空的。这就是为什么我问你为什么放cannotBeEmpty()
  • 如果没有将配置设置为config.yml,TreeBuilder 的外观如何?我的意思是默认值是['import' => ['paths' => []]]?
  • 我相信根节点仍然是必需的,但导入和路径可能为空。但是一旦你有一个代码,它就很容易被检查
猜你喜欢
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2012-04-18
相关资源
最近更新 更多