2

私はYMLで次のような構成を持っています:

foobar_template:
    templates:
        homepage:
            name: "Homepage template"
            regions: ["top", "main", "left", "bottom"]
            layout:
              - [ { region: "top", colspan: 4 } ]
              - [ { region: "left" }, { region: "main", colspan: 3 } ]
              - [ { region: "bottom", colspan: 4 } ]

        subpage:
            name: "Subpage template"
            regions: ["top", "main"]
            layout:
              - [ { region: "top", colspan: 4 } ]
              - [ { region: "main", colspan: 4 } ]

この構成が仕様に従って定義されていることを確認しようとしましたが、レイアウト セクションに少なくとも 1 つの領域を定義するエントリが含まれていることを確認できないようです。現在、私の Configuration.php には次のものが含まれています。

class Configuration implements ConfigurationInterface
{
    /**
     * {@inheritDoc}
     */
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('foobar_template');

        $rootNode
            ->children()
                ->arrayNode('templates')
                    ->useAttributeAsKey('template')
                    ->prototype('array')
                        ->children()
                            ->scalarNode('name')->end()
                            ->arrayNode('regions')
                                ->isRequired()
                                ->requiresAtLeastOneElement()
                                ->prototype('scalar')->end()
                            ->end()
                            ->append($this->addLayoutNode())
                        ->end()
                    ->end()
                ->end()
            ->end();

        return $treeBuilder;
    }

    public function addLayoutNode()
    {
        $builder = new TreeBuilder();
        $node = $builder->root('layout');

        $node
            ->isRequired()
            ->requiresAtLeastOneElement()
            ->prototype('array')
                ->prototype('variable')->end()
            ->end();

        return $node;
    }
}

- [{ region: <region_name> }]しかし、指定されたレイアウト ブロックにリージョンが含まれていることをテストしたい (つまり、少なくとも->prototype('variable')->end().これを行おうとすると、InvalidDefinitionException または InvalidConfigurationException が発生します。Configuration で上記をテストする方法を知っている人はいますか? (私は現在、バンドル拡張機能のロードでいくつかのサニティ チェックを行っていますが、Configuration がチェックできれば、よりクリーンになります。これ)。

4

1 に答える 1

-2

ConfigurationProccesor:http ://symfony.com/doc/2.0/components/config/definition.html#processing-configuration-values またはCompilerPassを使用して、より複雑な構成を行うことができます。

于 2013-02-25T11:27:20.093 に答える