5
$rootNode
    ->children()
        ->arrayNode('form')
            ->info('form configuration')
            ->canBeUnset()
            ->treatNullLike(array('enabled' => true))
            ->treatTrueLike(array('enabled' => true))
            ->children()
                ->booleanNode('enabled')->defaultTrue()->end()
            ->end()
        ->end()

上記のスニペットの5行目Symfony\Bundle\FrameworkBundle\DependencyInjection\Configurationは、メソッドを使用していますcanBeUnset()。削除しても何も起こらないようですので、どうなるかわかりません。私は自分のバンドルのセマンティック構成を理解するために働いています。

4

1 に答える 1

6

Symfony/Component/Config/Definition/Builder/ArrayNodeDefinitionコードに続いて、このメソッドの定義をクラスで見つけることができます。

/**
 * Sets whether the node can be unset.
 *
 * @param Boolean $allow
 *
 * @return ArrayNodeDefinition
 */
public function canBeUnset($allow = true)
{
    $this->merge()->allowUnset($allow);

    return $this;
}

これは、構成のマージを処理する MergeBuilder ( ) に渡されSymfony/Component/Config/Definition/Builder/MergeBuilderます。

/**
 * Sets whether the node can be unset.
 *
 * @param Boolean $allow
 *
 * @return MergeBuilder
 */
public function allowUnset($allow = true)
{
    $this->allowFalse = $allow;

    return $this;
}

したがって、私の理解では、このメソッドは、オーバーライドする構成が値をサポートしていない場合に備えて、構成のマージ中に構成値を設定解除できるかどうかを定義するということです。ただし、設定解除が許可されていない場合の動作を確認するためにテストする必要がありますが、isRequired.

于 2012-09-09T09:44:06.887 に答える