Configuration Symfony2树生成器-方法canBeUnset()的作用是什么?

Configuration Symfony2树生成器-方法canBeUnset()的作用是什么?,configuration,symfony,Configuration,Symfony,来自Symfony\Bundle\FrameworkBundle\DependencyInjection\Configuration的上述代码片段的第5行使用了方法canBeUnset()。我不知道这是怎么回事,因为如果我移除它,它似乎什么都没做。我正在努力理解我自己的捆绑包的语义配置。遵循代码,您可以在Symfony/Component/Config/definition/Builder/ArrayNodeDefinition类中找到此方法的定义 /** *设置是否可以取消设置节点。 * *@

来自
Symfony\Bundle\FrameworkBundle\DependencyInjection\Configuration
的上述代码片段的第5行使用了方法
canBeUnset()
。我不知道这是怎么回事,因为如果我移除它,它似乎什么都没做。我正在努力理解我自己的捆绑包的语义配置。

遵循代码,您可以在
Symfony/Component/Config/definition/Builder/ArrayNodeDefinition
类中找到此方法的定义

/**
*设置是否可以取消设置节点。
*
*@param Boolean$allow
*
*@return ArrayNodeDefinition
*/
公共函数可以取消设置($allow=true)
{
$this->merge()->allowUnset($allow);
退还$this;
}
这将传递给处理配置合并的MergeBuilder(
Symfony/Component/Config/Definition/Builder/MergeBuilder

/**
*设置是否可以取消设置节点。
*
*@param Boolean$allow
*
*@return合并生成器
*/
公共函数allowUnset($allow=true)
{
$this->allowFalse=$allow;
退还$this;
}

因此,我的理解是,该方法定义了,如果在合并配置时可以取消设置配置值,以防覆盖配置不支持该值。不过,我必须进行测试,以找出不允许取消设置时的行为,但我猜它会抛出一个关于缺少配置值的异常,就像
isRequired

但是如何取消设置配置值?例如,
framework.profiler
config_dev.yml
中设置,而
config_test.yml
包括
config_dev.yml
。只有在没有这样的配置键时才会禁用探查器
framework.profiler
。那我怎么才能解除它呢?将其设置为
{}
~
无效。(Symfony 2.1,我知道这可以在2.2中使用
framework.profiler.enabled
)来完成。要实际取消设置值,请使用
form:false
{}
~
不会取消设置)。
$rootNode
    ->children()
        ->arrayNode('form')
            ->info('form configuration')
            ->canBeUnset()
            ->treatNullLike(array('enabled' => true))
            ->treatTrueLike(array('enabled' => true))
            ->children()
                ->booleanNode('enabled')->defaultTrue()->end()
            ->end()
        ->end()