Browse Source

Use a configuration tree to build and merge the config files. This provides for better documentation of how and what can be added in the config file as well as better error reporting. I will begin writtting some test cases for this as the next step but as this bundle has no tests cases right now, a starting point needs to be created first.

michaelwilliams 14 years ago
parent
commit
bc85f36877

+ 15 - 1
DependencyInjection/Configuration.php

@@ -42,11 +42,25 @@ class Configuration
                 ->useAttributeAsKey('entity_name')
                 ->requiresAtLeastOneElement()
                 ->prototype('array')
-                    ->scalarNode('label')->isRequired()->cannotBeEmpty()->end()
+                    ->scalarNode('label')->cannotBeEmpty()->defaultValue('defualt')->end()
                     ->scalarNode('group')->isRequired()->cannotBeEmpty()->end()
                     ->scalarNode('class')->isRequired()->cannotBeEmpty()->end()
                     ->scalarNode('entity')->isRequired()->cannotBeEmpty()->end()
                     ->scalarNode('controller')->isRequired()->end()
+                    ->arrayNode('children')
+                		->useAttributeAsKey('entity_name')
+                    	->prototype('array')
+                   			->scalarNode('label')->cannotBeEmpty()->addDefaultsIfNotSet('defualt')->end()
+                    		->scalarNode('group')->isRequired()->cannotBeEmpty()->end()
+                    		->scalarNode('class')->isRequired()->cannotBeEmpty()->end()
+                    		->scalarNode('entity')->isRequired()->cannotBeEmpty()->end()
+                    		->scalarNode('controller')->isRequired()->end()
+                    	->end()
+                    ->end()
+                    ->arrayNode('options')
+                    	->addDefaultsIfNotSet()
+                   		->booleanNode('show_in_dashboard')->defaultTrue()->end()
+                    ->end()
                 ->end()
             ->end()
             ->arrayNode('templates')

+ 21 - 33
DependencyInjection/SonataBaseApplicationExtension.php

@@ -39,15 +39,32 @@ class SonataBaseApplicationExtension extends Extension
     );
     
     /**
-     * Loads the url shortener configuration.
+     * Parses the configuration to setup the admin controllers and setup rouing
+     * information. Format is following:
+     * 
+     * sonata_base_application:
+     *    entities:
+     *        post:
+     *           label:      post
+     *       	 group:      posts
+     *       	 class:      Funsational\SimpleBlogBundle\Admin\Entity\PostAdmin
+     *       	 entity:     Funsational\SimpleBlogBundle\Entity\Post
+     *       	 controller: Funsational\SimpleBlogBundle\Controller\PostAdminController
+     *       	 children:
+     *            	comment:
+     *              	label:      comment
+     *               	group:      comments
+     *               	class:      Funsational\SimpleBlogBundle\Admin\Entity\CommentAdmin
+     *               	entity:     Funsational\SimpleBlogBundle\Entity\Comment
+     *               	controller: Funsational\SimpleBlogBundle\Controller\CommentAdminController
+     *       	options:
+     *           	show_in_dashboard: true
      *
      * @param array            $config    An array of configuration settings
      * @param ContainerBuilder $container A ContainerBuilder instance
      */
     public function load(array $configs, ContainerBuilder $container)
     {
-    	$config = call_user_func_array('array_merge_recursive', $configs);
-    	
         $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
         $loader->load('templates.xml');
         
@@ -80,26 +97,6 @@ class SonataBaseApplicationExtension extends Extension
         $definition->addMethodCall('setContainer', array(new Reference('service_container')));
         
         foreach ($config['entities'] as $code => $configuration) {
-            if (!isset($configuration['group'])) {
-                $configuration['group'] = 'default';
-            }
-
-            if (!isset($configuration['label'])) {
-                $configuration['label'] = $code;
-            }
-
-            if (!isset($configuration['children'])) {
-                $configuration['children'] = array();
-            }
-            
-            if (!isset($configuration['options'])) {
-                $configuration['options'] = array();
-            }
-            
-            if (!isset($configuration['options']['show_in_dashboard'])) {
-                $configuration['options']['show_in_dashboard'] = true;
-            }
-
             $definition->addMethodCall('addConfiguration', array($code, $configuration));
         }
 
@@ -111,16 +108,7 @@ class SonataBaseApplicationExtension extends Extension
         $container->setDefinition('sonata_base_application.route_loader', $definition);
     }
     
-    protected function configLoadFiles($container)
-    {
-        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
-
-        foreach ($this->configNamespaces as $ns => $params) {
-            $loader->load(sprintf('%s.xml', $ns));
-        }
-    }
-    
-    protected function configSetup($config, $container)
+    protected function configSetupTemplates($config, $container)
     {
         foreach ($this->configNamespaces as $ns => $params) {