vendor/sonata-project/admin-bundle/src/Menu/MenuBuilder.php line 72

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of the Sonata Project package.
  5.  *
  6.  * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Sonata\AdminBundle\Menu;
  12. use Knp\Menu\FactoryInterface;
  13. use Knp\Menu\ItemInterface;
  14. use Knp\Menu\Provider\MenuProviderInterface;
  15. use Sonata\AdminBundle\Admin\Pool;
  16. use Sonata\AdminBundle\Event\ConfigureMenuEvent;
  17. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  18. /**
  19.  * Sonata menu builder.
  20.  *
  21.  * @author Martin HasoĊˆ <martin.hason@gmail.com>
  22.  * @author Alexandru Furculita <alex@furculita.net>
  23.  */
  24. final class MenuBuilder
  25. {
  26.     private Pool $pool;
  27.     private FactoryInterface $factory;
  28.     private MenuProviderInterface $provider;
  29.     private EventDispatcherInterface $eventDispatcher;
  30.     public function __construct(
  31.         Pool $pool,
  32.         FactoryInterface $factory,
  33.         MenuProviderInterface $provider,
  34.         EventDispatcherInterface $eventDispatcher
  35.     ) {
  36.         $this->pool $pool;
  37.         $this->factory $factory;
  38.         $this->provider $provider;
  39.         $this->eventDispatcher $eventDispatcher;
  40.     }
  41.     /**
  42.      * Builds sidebar menu.
  43.      */
  44.     public function createSidebarMenu(): ItemInterface
  45.     {
  46.         $menu $this->factory->createItem('root');
  47.         foreach ($this->pool->getAdminGroups() as $name => $group) {
  48.             $extras = [
  49.                 'icon' => $group['icon'],
  50.                 'translation_domain' => $group['translation_domain'],
  51.                 'label_catalogue' => $group['label_catalogue'] ?? ''// NEXT_MAJOR: Remove this line.
  52.                 'roles' => $group['roles'],
  53.                 'sonata_admin' => true,
  54.             ];
  55.             $menuProvider $group['provider'] ?? 'sonata_group_menu';
  56.             $subMenu $this->provider->get(
  57.                 $menuProvider,
  58.                 [
  59.                     'name' => $name,
  60.                     'group' => $group,
  61.                 ]
  62.             );
  63.             $subMenu $menu->addChild($subMenu);
  64.             $subMenu->setExtras(array_merge($subMenu->getExtras(), $extras));
  65.         }
  66.         $event = new ConfigureMenuEvent($this->factory$menu);
  67.         $this->eventDispatcher->dispatch($eventConfigureMenuEvent::SIDEBAR);
  68.         return $event->getMenu();
  69.     }
  70. }