Prechádzať zdrojové kódy

Configure the User/Group classes

Thomas Rabaix 13 rokov pred
rodič
commit
6ef3b63e71

+ 45 - 0
DependencyInjection/Configuration.php

@@ -0,0 +1,45 @@
+<?php
+/*
+ * This file is part of the Sonata package.
+ *
+ * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sonata\UserBundle\DependencyInjection;
+
+use Symfony\Component\Config\Definition\Builder\TreeBuilder;
+use Symfony\Component\Config\Definition\ConfigurationInterface;
+
+/**
+ * This is the class that validates and merges configuration from your app/config files
+ *
+ * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class}
+ */
+class Configuration implements ConfigurationInterface
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function getConfigTreeBuilder()
+    {
+        $treeBuilder = new TreeBuilder();
+        $rootNode = $treeBuilder->root('sonata_user');
+
+        $rootNode
+            ->children()
+                ->arrayNode('class')
+                    ->addDefaultsIfNotSet()
+                    ->children()
+                        ->scalarNode('group')->defaultValue('Application\\Sonata\\UserBundle\\Entity\\User')->end()
+                        ->scalarNode('user')->defaultValue('Application\\Sonata\\UserBundle\\Entity\\Group')->end()
+                    ->end()
+                ->end()
+            ->end()
+        ;
+
+        return $treeBuilder;
+    }
+}

+ 32 - 8
DependencyInjection/SonataUserExtension.php

@@ -18,6 +18,8 @@ use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\Definition;
 use Symfony\Component\HttpKernel\DependencyInjection\Extension;
 use Symfony\Component\Config\FileLocator;
+use Symfony\Component\Config\Definition\Processor;
+
 use Sonata\EasyExtendsBundle\Mapper\DoctrineCollector;
 
 /**
@@ -32,29 +34,51 @@ class SonataUserExtension extends Extension
      * @param array            $config    An array of configuration settings
      * @param ContainerBuilder $container A ContainerBuilder instance
      */
-    public function load(array $config, ContainerBuilder $container)
+    public function load(array $configs, ContainerBuilder $container)
     {
+        $processor = new Processor();
+        $configuration = new Configuration();
+        $config = $processor->processConfiguration($configuration, $configs);
+
+
         $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
         $loader->load('admin_orm.xml');
         $loader->load('form.xml');
 
-        $this->registerDoctrineMapping($config, $container);
+        $this->registerDoctrineMapping($config);
+        $this->configureClass($config, $container);
     }
 
     /**
-     * @param array $config
+     * @param $config
      * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
      * @return void
      */
+    public function configureClass($config, ContainerBuilder $container)
+    {
+        $container->setParameter('sonata.user.admin.user.entity', $config['class']['user']);
+        $container->setParameter('sonata.user.admin.group.entity', $config['class']['group']);
+    }
+
+    /**
+     * @param array $config
+     * @return void
+     */
     public function registerDoctrineMapping(array $config)
     {
+        foreach ($config['class'] as $type => $class) {
+            if (!class_exists($class)) {
+                return;
+            }
+        }
+
         $collector = DoctrineCollector::getInstance();
 
-        $collector->addAssociation('Application\\Sonata\\UserBundle\\Entity\\User', 'mapManyToMany', array(
-            'fieldName' => 'groups',
-            'targetEntity' => 'Application\\Sonata\\UserBundle\\Entity\\Group',
-            'cascade' => array( ),
-            'joinTable' => array(
+        $collector->addAssociation($config['class']['user'], 'mapManyToMany', array(
+            'fieldName'       => 'groups',
+            'targetEntity'    => $config['class']['group'],
+            'cascade'         => array( ),
+            'joinTable'       => array(
                 'name' => 'fos_user_user_group',
                 'joinColumns' => array(
                     array(

+ 0 - 2
Resources/config/admin_orm.xml

@@ -7,13 +7,11 @@
         <!-- USER -->
         <parameter key="sonata.user.admin.user.class">Sonata\UserBundle\Admin\Entity\UserAdmin</parameter>
         <parameter key="sonata.user.admin.user.controller">SonataAdminBundle:CRUD</parameter>
-        <parameter key="sonata.user.admin.user.entity">Application\Sonata\UserBundle\Entity\User</parameter>
         <parameter key="sonata.user.admin.user.translation_domain">SonataUserBundle</parameter>
 
         <!-- GROUP -->
         <parameter key="sonata.user.admin.group.class">Sonata\UserBundle\Admin\Entity\GroupAdmin</parameter>
         <parameter key="sonata.user.admin.group.controller">SonataAdminBundle:CRUD</parameter>
-        <parameter key="sonata.user.admin.group.entity">Application\Sonata\UserBundle\Entity\Group</parameter>
         <parameter key="sonata.user.admin.group.translation_domain">%sonata.user.admin.user.translation_domain%</parameter>
 
         <parameter key="sonata.user.admin.groupname">sonata_user</parameter>

+ 0 - 5
Resources/doc/index.rst

@@ -1,11 +1,6 @@
 User Bundle
 ===========
 
-**Google Groups**: For questions and proposals you can post on this google groups
-
-* `Sonata Users <https://groups.google.com/group/sonata-users>`_: Only for user questions
-* `Sonata Devs <https://groups.google.com/group/sonata-devs>`_: Only for devs
-
 Reference Guide
 ---------------
 

+ 8 - 0
Resources/doc/reference/installation.rst

@@ -110,6 +110,14 @@ Then add these bundles in the config mapping definition (or enable `auto_mapping
 
     # app/config/config.yml
 
+    fos_user:
+        db_driver:      orm # can be orm or odm
+        firewall_name:  main
+        user_class:     Application\Sonata\UserBundle\Entity\User
+
+        group:
+            group_class: Application\Sonata\UserBundle\Entity\Group
+
     doctrine:
         orm:
             entity_managers: