Symfony2 treeBuilder新的根项

时间:2014-03-10 13:14:58

标签: symfony symfony-2.4

我在treeBuilder中创建了一个新的根目录:

class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $apiNode = $treeBuilder->root('nieuwname');
        $apiNode
            ->children()
                ->scalarNode('test')
                ->isRequired()
            ->end();
    }
}

然后我得到了下一个例外:

  

The child node "test" at path "nieuwname" must be configured.

Oké听起来不错。

# config.yml
nieuwname:
    test: "test"

然后我得到一个例外:

  

There is no extension able to load the configuration for "nieuwname"

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您需要使用已定义为根树的内容覆盖扩展别名。

namespace Your\BundleNameBundle\DependencyInjection;

class YourBundleNameExtension implements ExtensionInterface
{
    /**
     * {@inheritDoc}
     */
    public function getAlias()
    {
        return 'nieuwname';
    }
}

更改根树名称以匹配别名命名约定,这通常会使您的包名称变为小写和下划线。

因此,名为MyWebsiteBundle的捆绑包将具有别名my_website

$apiNode = $treeBuilder->root('your_bundle_name');

答案 1 :(得分:0)

这是因为扩展类中的别名不完全相同。 Symfony2使用命名约定检测别名(例如,名为MyCustomAPIBundle的包将具有my_custom_a_p_i别名)。如果在配置类中更改它,则会出现这样的异常。

查看this article以了解您使用自定义别名并避免重复的代码行。