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

La línea 5 del fragmento anterior de Symfony\Bundle\FrameworkBundle\DependencyInjection\Configuration utiliza el método canBeUnset(). No sé lo que hace porque parece no hacer nada si lo elimino. Estoy trabajando en la comprensión de la configuración semántica de mis propios paquetes.Generador de árbol Symfony2: ¿qué hace el método canBeUnset()?

Respuesta

6

Siguiendo el código, puede encontrar la definición de este método en la clase 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; 
} 

Este se pasa a MergeBuilder (Symfony/Component/Config/Definition/Builder/MergeBuilder) que se ocupa de la fusión de configuración.

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

    return $this; 
} 

Así que mi entendimiento es que este método define, si su valor de configuración se puede desactivar mientras que la fusión de configuraciones, en el caso de la configuración primordial no es compatible con el valor. Tendría que probar, sin embargo, para descubrir el comportamiento si no se permite la desconexión, pero supongo que arrojaría una excepción sobre un valor de configuración faltante como isRequired.

+0

¿Pero cómo desarma un valor de configuración? Por ejemplo 'framework.profiler' se establece en' config_dev.yml' y 'config_test.yml' incluye' config_dev.yml'. El generador de perfiles solo se desactiva si no existe dicha clave de configuración 'framework.profiler'. Entonces, ¿cómo puedo desarmarlo? Establecerlo en '{}' o '~' no funcionó. (Symfony 2.1, sé que esto se puede hacer a partir de 2.2 con 'framework.profiler.enabled'). – flu

+1

Para realmente desarmar el valor use 'form: false' (' {} 'y' ~ 'no lo desarmará). – flu

Cuestiones relacionadas