vendor/umbrella2/corebundle/src/Menu/MenuProvider.php line 34

Open in your IDE?
  1. <?php
  2. namespace Umbrella\CoreBundle\Menu;
  3. use Umbrella\CoreBundle\Menu\Builder\MenuBuilder;
  4. use Umbrella\CoreBundle\Menu\DTO\Breadcrumb;
  5. use Umbrella\CoreBundle\Menu\DTO\BreadcrumbItem;
  6. use Umbrella\CoreBundle\Menu\DTO\Menu;
  7. class MenuProvider
  8. {
  9.     private MenuRegistry $registry;
  10.     /**
  11.      * MenuProvider constructor.
  12.      */
  13.     public function __construct(MenuRegistry $registry)
  14.     {
  15.         $this->registry $registry;
  16.     }
  17.     public function get($menu, array $options = []): Menu
  18.     {
  19.         if ($menu instanceof Menu) {
  20.             return $menu;
  21.         }
  22.         if (!\is_string($menu)) {
  23.             throw new \InvalidArgumentException('Unsupported $menu arguments, expected a Menu class or a Menu name.');
  24.         }
  25.         $type $this->registry->getType($menu);
  26.         $builder = new MenuBuilder($menu);
  27.         $type->buildMenu($builder$options);
  28.         $menu $builder->getMenu();
  29.         foreach ($menu->getVisitors() as $visitorName) {
  30.             $this->registry->getVisitor($visitorName)->visit($menu);
  31.         }
  32.         return $menu;
  33.     }
  34.     public function render($menu, array $options = []): string
  35.     {
  36.         $menu $this->get($menu);
  37.         $type $this->registry->getType($menu->getName());
  38.         return $type->renderMenu($menu$options);
  39.     }
  40.     public function getBreadcrumb($menuOrBreadcrumb, array $options = [], ...$children): Breadcrumb
  41.     {
  42.         if ($menuOrBreadcrumb instanceof Breadcrumb) {
  43.             return $menuOrBreadcrumb;
  44.         }
  45.         $menu $this->get($menuOrBreadcrumb$options);
  46.         $bcItems = [];
  47.         $bcIcon null;
  48.         $menuItem $menu->getCurrent();
  49.         while (null !== $menuItem && !$menuItem->isRoot()) {
  50.             $bcItem = new BreadcrumbItem();
  51.             $bcItem->setLabel($menuItem->getLabel());
  52.             $bcItem->setRoute($menuItem->getRoute(), $menuItem->getRouteParams());
  53.             $bcItem->setTranslationDomain($menuItem->getTranslationDomain());
  54.             if (null === $bcIcon) {
  55.                 $bcIcon $menuItem->getIcon();
  56.             }
  57.             $bcItems[] = $bcItem;
  58.             $menuItem $menuItem->getParent();
  59.         }
  60.         $breadcrumb = new Breadcrumb($menu->getName(), array_reverse($bcItems));
  61.         $breadcrumb->setIcon($bcIcon);
  62.         foreach ($children as $child) {
  63.             $breadcrumb->add($child);
  64.         }
  65.         return $breadcrumb;
  66.     }
  67.     public function renderBreadcrumb($menuOrBreadcrumb, array $options = []): string
  68.     {
  69.         $breadcrumb $this->getBreadcrumb($menuOrBreadcrumb);
  70.         $type $this->registry->getType($breadcrumb->getName());
  71.         return $type->renderBreadcrumb($breadcrumb$options);
  72.     }
  73. }