浏览代码

Merge pull request #2215 from greg0ire/choose_route_builder_wisely

Choose route builder wisely
Thomas 11 年之前
父节点
当前提交
92aaa662af

+ 0 - 2
.gitignore

@@ -1,5 +1,3 @@
-.idea
-.DS_Store
 build
 phpunit.xml
 Resources/doc/_build/*

+ 2 - 1
DependencyInjection/Compiler/AddDependencyCallsCompilerPass.php

@@ -201,7 +201,8 @@ class AddDependencyCallsCompilerPass implements CompilerPassInterface
             'validator'                 => 'validator',
             'security_handler'          => 'sonata.admin.security.handler',
             'menu_factory'              => 'knp_menu.factory',
-            'route_builder'             => 'sonata.admin.route.path_info',
+            'route_builder'             => 'sonata.admin.route.path_info' .
+                (($manager_type == 'doctrine_phpcr') ? '_slashes' : ''),
             'label_translator_strategy' => 'sonata.admin.label.strategy.native'
         );
 

+ 3 - 2
Resources/doc/reference/advanced.rst

@@ -20,11 +20,12 @@ router                        router
 validator                     validator
 security_handler              sonata.admin.security.handler
 menu_factory                  knp_menu.factory
-route_builder                 sonata.admin.route.path_info
+route_builder                 sonata.admin.route.path_info | sonata.admin.route.path_info_slashes
 label_translator_strategy     sonata.admin.label.strategy.form_component
 =========================     =============================================
 
-Note: %manager-type% is to be replaced by the manager type (orm, doctrine_mongodb...)
+Note: %manager-type% is to be replaced by the manager type (orm, doctrine_mongodb...),
+and the default route_builder depends on it.
 
 You have 2 ways of defining the dependencies inside ``services.xml``:
 

+ 57 - 15
Tests/DependencyInjection/Compiler/AddDependencyCallsCompilerPassTest.php

@@ -111,6 +111,26 @@ class AddDependencyCallsCompilerPassTest extends \PHPUnit_Framework_TestCase
         $this->assertContains('sonata_article_admin', $adminClasses['Sonata\AdminBundle\Tests\DependencyInjection\Article']);
         $this->assertArrayHasKey('Sonata\AdminBundle\Tests\DependencyInjection\News', $adminClasses);
         $this->assertContains('sonata_news_admin', $adminClasses['Sonata\AdminBundle\Tests\DependencyInjection\News']);
+        $this->assertSame(
+            'sonata.admin.route.path_info',
+            (string) current(array_filter(
+                $container->getDefinition('sonata_news_admin')->getMethodCalls(),
+                function ($element) {
+                    return $element[0] == 'setRouteBuilder';
+                }
+            ))[1][0],
+            'The news admin uses the orm, and should therefore use the path_info router.'
+        );
+        $this->assertSame(
+            'sonata.admin.route.path_info_slashes',
+            (string) current(array_filter(
+                $container->getDefinition('sonata_article_admin')->getMethodCalls(),
+                function ($element) {
+                    return $element[0] == 'setRouteBuilder';
+                }
+            ))[1][0],
+            'The article admin uses the odm, and should therefore use the path_info_slashes router.'
+        );
     }
 
     /**
@@ -199,21 +219,43 @@ class AddDependencyCallsCompilerPassTest extends \PHPUnit_Framework_TestCase
         $container
             ->register('form.factory')
             ->setClass('Symfony\Component\Form\FormFactoryInterface');
+        foreach (array(
+            'doctrine_phpcr' => 'PHPCR',
+            'orm'            => 'ORM') as $key => $bundleSubstring) {
+            $container
+                ->register(sprintf('sonata.admin.manager.%s', $key))
+                ->setClass(sprintf(
+                    'Sonata\Doctrine%sAdminBundle\Model\ModelManager',
+                    $bundleSubstring
+                ));
+            $container
+                ->register(sprintf('sonata.admin.builder.%s_form', $key))
+                ->setClass(sprintf(
+                    'Sonata\Doctrine%sAdminBundle\Builder\FormContractor',
+                    $bundleSubstring
+                ));
+            $container
+                ->register(sprintf('sonata.admin.builder.%s_show', $key))
+                ->setClass(sprintf(
+                    'Sonata\Doctrine%sAdminBundle\Builder\ShowBuilder',
+                    $bundleSubstring
+                ));
+            $container
+                ->register(sprintf('sonata.admin.builder.%s_list', $key))
+                ->setClass(sprintf(
+                    'Sonata\Doctrine%sAdminBundle\Builder\ListBuilder',
+                    $bundleSubstring
+                ));
+            $container
+                ->register(sprintf('sonata.admin.builder.%s_datagrid', $key))
+                ->setClass(sprintf(
+                    'Sonata\Doctrine%sAdminBundle\Builder\DatagridBuilder',
+                    $bundleSubstring
+                ));
+        }
         $container
-            ->register('sonata.admin.manager.orm')
-            ->setClass('Sonata\DoctrineORMAdminBundle\Model\ModelManager');
-        $container
-            ->register('sonata.admin.builder.orm_form')
-            ->setClass('Sonata\DoctrineORMAdminBundle\Builder\FormContractor');
-        $container
-            ->register('sonata.admin.builder.orm_show')
-            ->setClass('Sonata\DoctrineORMAdminBundle\Builder\ShowBuilder');
-        $container
-            ->register('sonata.admin.builder.orm_list')
-            ->setClass('Sonata\DoctrineORMAdminBundle\Builder\ListBuilder');
-        $container
-            ->register('sonata.admin.builder.orm_datagrid')
-            ->setClass('Sonata\DoctrineORMAdminBundle\Builder\DatagridBuilder');
+            ->register('sonata.admin.route.path_info_slashes')
+            ->setClass('Sonata\DoctrinePHPCRAdminBundle\Route\PathInfoBuilderSlashes');
         $container
             ->register('sonata.admin.route.cache')
             ->setClass('Sonata\AdminBundle\Route\RoutesCache');
@@ -239,7 +281,7 @@ class AddDependencyCallsCompilerPassTest extends \PHPUnit_Framework_TestCase
             ->register('sonata_article_admin')
             ->setClass('Sonata\AdminBundle\Tests\DependencyInjection\MockAdmin')
             ->setArguments(array('', 'Sonata\AdminBundle\Tests\DependencyInjection\Article', 'SonataAdminBundle:CRUD'))
-            ->addTag('sonata.admin', array('group' => 'sonata_group_one', 'manager_type' => 'orm'));
+            ->addTag('sonata.admin', array('group' => 'sonata_group_one', 'manager_type' => 'doctrine_phpcr'));
 
         return $container;
     }