Przeglądaj źródła

Do not display menu item if no child is displayed

Emmanuel Vella 10 lat temu
rodzic
commit
debaa45049

+ 4 - 22
Tests/Twig/Extension/SonataAdminExtensionTest.php

@@ -997,17 +997,8 @@ class SonataAdminExtensionTest extends \PHPUnit_Framework_TestCase
         $menu = $this->twigExtension->getKnpMenu($request);
 
         $this->assertInstanceOf('Knp\Menu\ItemInterface', $menu);
-        $this->assertArrayHasKey('bar', $menu->getChildren());
-
-        foreach ($menu->getChildren() as $key => $child) {
-            $this->assertInstanceOf('Knp\Menu\MenuItem', $child);
-            $this->assertEquals('bar', $child->getName());
-            $this->assertEquals($adminGroups['bar']['label'], $child->getLabel());
-
-            // menu items
-            $children = $child->getChildren();
-            $this->assertCount(0, $children);
-        }
+        $this->assertArrayNotHasKey('bar', $menu->getChildren());
+        $this->assertCount(0, $menu->getChildren());
     }
 
     public function testGetKnpMenuWithNotGrantedList()
@@ -1044,16 +1035,7 @@ class SonataAdminExtensionTest extends \PHPUnit_Framework_TestCase
         $menu = $this->twigExtension->getKnpMenu($request);
 
         $this->assertInstanceOf('Knp\Menu\ItemInterface', $menu);
-        $this->assertArrayHasKey('bar', $menu->getChildren());
-
-        foreach ($menu->getChildren() as $key => $child) {
-            $this->assertInstanceOf('Knp\Menu\MenuItem', $child);
-            $this->assertEquals('bar', $child->getName());
-            $this->assertEquals($adminGroups['bar']['label'], $child->getLabel());
-
-            // menu items
-            $children = $child->getChildren();
-            $this->assertCount(0, $children);
-        }
+        $this->assertArrayNotHasKey('bar', $menu->getChildren());
+        $this->assertCount(0, $menu->getChildren());
     }
 }

+ 4 - 0
Twig/Extension/SonataAdminExtension.php

@@ -415,6 +415,10 @@ class SonataAdminExtension extends \Twig_Extension
                     ->setExtra('admin', $admin)
                 ;
             }
+
+            if (0 === count($menu[$name]->getChildren())) {
+                $menu->removeChild($name);
+            }
         }
 
         return $menu;