2012-09-21 4 views
1

J'ai créé une classe Configuration et construit un arbre qui définit ma configuration dans cette classe, mais je suppose que c'est très moche alors ma question est de trouver une solution pour simplifier mes cals?Treebuilder Validation pour le fichier yml

<?php 
    namespace Myapp\Mybundle\DependencyInjection; 

    use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; 
    use Symfony\Component\Config\Definition\Builder\TreeBuilder; 
    use Symfony\Component\Config\Definition\ConfigurationInterface; 


class Configuration implements ConfigurationInterface 
{ 
/** 
* {@inheritDoc} 
*/ 

public function getConfigTreeBuilder() 
{ 

    $treeBuilder = new TreeBuilder(); 
    $rootNode = $treeBuilder->root('em_profession'); 

    $rootNode 
     ->children() 
       ->arrayNode('region') 
     ->isRequired() 
       ->requiresAtLeastOneElement() 
       ->useAttributeAsKey('id') 
          ->prototype('array') 
             ->children() 
              ->scalarNode('label') 
              ->isRequired() 
              ->cannotBeEmpty()->defaultValue('em_profession_label')->end() 
              ->arrayNode('childrens') 
              ->isRequired() 
              ->requiresAtLeastOneElement() 
              ->useAttributeAsKey('id') 
                ->prototype('array') 
                  ->children() 
                   ->scalarNode('label')->end() 
                   ->arrayNode('childrens') 
                   ->isRequired() 
                   ->requiresAtLeastOneElement() 
                   ->useAttributeAsKey('id') 
                     ->prototype('array') 
                      ->children() 
                       ->scalarNode('label')->end() 
                       ->arrayNode('childrens') 
                       ->isRequired() 
                       ->requiresAtLeastOneElement() 
                       ->useAttributeAsKey('id') 
                         ->prototype('array') 
                          ->children() 
                           ->scalarNode('label')->end() 
                           ->arrayNode('childrens') 
                           ->isRequired() 
                           ->requiresAtLeastOneElement() 
                           ->useAttributeAsKey('id') 
                            ->prototype('array') 
                              ->children() 
                               ->scalarNode('label')->end() 
                               ->arrayNode('childrens') 
                               ->isRequired() 
                               ->requiresAtLeastOneElement() 
                               ->useAttributeAsKey('id') 
                                 ->prototype('array') 
                                 ->end() 
                               ->end() 
                              ->end() 

                            ->end() 

                            ->end() 
                          ->end() 
                         ->end() 
                       ->end() 
                      ->end() 

                     ->end() 

                    ->end() 
                 ->end() 

                ->end() 

              ->end() 

             ->end() 
          ->end() 
     ->end() 
     ->end() 
    ; 

    return $treeBuilder; 
} 

Ma configuration fonctionne bien, mais il est très grand donc je wich pour minimiser pour simplifier et d'arrêter la répétition du code ...

modifier

OK Je sais cette solution mais je suppose que je ne peux pas l'appliquer dans ma configuration, par exemple dans le fichier de configuration Twig ils utilisent une fonction personnalisée à la fin de la classe après "-> end()" mais dans ma configuration je l'utilise dans "prototype()" avoir beaucoup de répétition de code mais enfant à l'intérieur de l'enfant à l'intérieur de l'enfant ... il est donc difficile de le minimiser correctement ...

Répondre

1

Comme Twig configuration file: méthodes utilisant:

$rootNode = $treeBuilder->root('em_profession'); 
$this->addMyCustomSection($rootNode); 

Puis, en addMyCustomSection méthode:

private function addMyCustomSection(ArrayNodeDefinition $rootNode) 
{ 
    // Continue modifying $rootNode 
} 

Reference.

+0

OK Je connais cette solution mais je ne peux pas l'appliquer dans ma configuration, par exemple dans le fichier de configuration Twig ils utilisent une fonction personnalisée en fin de classe après "-> end()" mais dans ma configuration je l'utilise à l'intérieur de "prototype()" j'ai aussi beaucoup de répétition de code mais l'enfant à l'intérieur de l'enfant à l'intérieur de l'enfant ... il est donc difficile de le minimiser correctement ... – Nll

Questions connexes