Browse Source

Refactor child item creation in a helper method

This will avoid some repetition, and could become more simple if the
breadcrumbs builder becomes stateful.
Grégoire Paris 9 years ago
parent
commit
7c5b0ed020
2 changed files with 50 additions and 28 deletions
  1. 47 25
      Admin/BreadcrumbsBuilder.php
  2. 3 3
      Tests/Admin/BreadcrumbsBuilderTest.php

+ 47 - 25
Admin/BreadcrumbsBuilder.php

@@ -50,29 +50,22 @@ final class BreadcrumbsBuilder implements BreadcrumbsBuilderInterface
         if (!$menu) {
             $menu = $admin->getMenuFactory()->createItem('root');
 
-            $menu = $menu->addChild(
-                $admin->trans(
-                    $admin->getLabelTranslatorStrategy()->getLabel(
-                        'dashboard',
-                        'breadcrumb',
-                        'link'
-                    ),
-                    array(),
-                    'SonataAdminBundle'
-                ),
+            $menu = $this->createMenuItem(
+                $admin,
+                $menu,
+                'dashboard',
+                'SonataAdminBundle',
                 array('uri' => $admin->getRouteGenerator()->generate(
                     'sonata_admin_dashboard'
                 ))
             );
         }
 
-        $menu = $menu->addChild(
-            $admin->trans(
-                $admin->getLabelTranslatorStrategy()->getLabel(sprintf(
-                    '%s_list',
-                    $admin->getClassnameLabel()
-                ), 'breadcrumb', 'link')
-            ),
+        $menu = $this->createMenuItem(
+            $admin,
+            $menu,
+            sprintf('%s_list', $admin->getClassnameLabel()),
+            null,
             array(
                 'uri' => $admin->hasRoute('list') && $admin->isGranted('LIST') ?
                 $admin->generateUrl('list') :
@@ -102,17 +95,46 @@ final class BreadcrumbsBuilder implements BreadcrumbsBuilderInterface
         } elseif ('create' !== $action && $admin->hasSubject()) {
             $menu = $menu->addChild($admin->toString($admin->getSubject()));
         } else {
-            $menu = $menu->addChild(
-                $admin->trans(
-                    $admin->getLabelTranslatorStrategy()->getLabel(
-                        sprintf('%s_%s', $admin->getClassnameLabel(), $action),
-                        'breadcrumb',
-                        'link'
-                    )
-                )
+            $menu = $this->createMenuItem(
+                $admin,
+                $menu,
+                sprintf('%s_%s', $admin->getClassnameLabel(), $action)
             );
         }
 
         return $menu;
     }
+
+    /**
+     * Creates a new menu item from a simple name. The name is normalized and
+     * translated with the specified translation domain.
+     *
+     * @param AdminInterface $admin             used for translation
+     * @param ItemInterface  $menu              will be modified and returned
+     * @param string         $name              the source of the final label
+     * @param string         $translationDomain for label translation
+     * @param array          $options           menu item options
+     *
+     * @return ItemInterface
+     */
+    private function createMenuItem(
+        AdminInterface $admin,
+        ItemInterface $menu,
+        $name,
+        $translationDomain = null,
+        $options = array()
+    ) {
+        return $menu->addChild(
+            $admin->trans(
+                $admin->getLabelTranslatorStrategy()->getLabel(
+                    $name,
+                    'breadcrumb',
+                    'link'
+                ),
+                array(),
+                $translationDomain
+            ),
+            $options
+        );
+    }
 }

+ 3 - 3
Tests/Admin/BreadcrumbsBuilderTest.php

@@ -345,12 +345,12 @@ class BreadcrumbsBuilderTest extends \PHPUnit_Framework_TestCase
                 'breadcrumb',
                 'link'
             )->willReturn('create my object');
-            $admin->trans('create my object')->willReturn('Créer mon objet')->shouldBeCalled();
-            $menu->addChild('Créer mon objet')->willReturn($menu);
+            $admin->trans('create my object', array(), null)->willReturn('Créer mon objet')->shouldBeCalled();
+            $menu->addChild('Créer mon objet', array())->willReturn($menu);
         }
         $childAdmin = $this->prophesize('Sonata\AdminBundle\Admin\AbstractAdmin');
 
-        $admin->trans('My class')->willReturn('Ma classe');
+        $admin->trans('My class', array(), null)->willReturn('Ma classe');
         $admin->hasRoute('list')->willReturn(true);
         $admin->isGranted('LIST')->willReturn(true);
         $admin->generateUrl('list')->willReturn('/myadmin/list');