lib/composer/MenuBundle/src/VisualMedia/MenuBundle/Twig/TwigMenuExtension.php line 68

Open in your IDE?
  1. <?php
  2. /**
  3.  * Twig Menu Extension
  4.  *
  5.  * @author Bertin van den Ham <b.vandenham@visualmedia.nl>
  6.  */
  7. namespace VisualMedia\MenuBundle\Twig;
  8. use Twig\Extension\AbstractExtension;
  9. use Twig\TwigFilter;
  10. use Twig\TwigFunction;
  11. use VisualMedia\LisaBundle\Component\Interfaces\MenuInterface;
  12. use VisualMedia\LisaBundle\Component\ManagerData;
  13. use VisualMedia\LisaBundle\Service\MenuProvider;
  14. use VisualMedia\MenuBundle\Entity\BaseMenuItem;
  15. use VisualMedia\MenuBundle\Manager\BaseMenuManager;
  16. use VisualMedia\MenuBundle\Service\MenuItemFactoryProvider;
  17. /**
  18.  * Twig Menu Extension
  19.  */
  20. class TwigMenuExtension extends AbstractExtension
  21. {
  22.     /**
  23.      * @var MenuProvider
  24.      */
  25.     protected $menuProvider;
  26.     /**
  27.      * @var BaseMenuManager
  28.      */
  29.     protected $menuManager;
  30.     /**
  31.      * @var MenuItemFactoryProvider
  32.      */
  33.     protected $menuItemFactoryProvider;
  34.     /**
  35.      * @param MenuProvider $menuProvider
  36.      * @param BaseMenuManager $menuManager
  37.      * @param MenuItemFactoryProvider $menuItemFactoryProvider
  38.      */
  39.     public function __construct(MenuProvider $menuProviderBaseMenuManager $menuManagerMenuItemFactoryProvider $menuItemFactoryProvider)
  40.     {
  41.         $this->menuProvider $menuProvider;
  42.         $this->menuManager $menuManager;
  43.         $this->menuItemFactoryProvider $menuItemFactoryProvider;
  44.     }
  45.     /**
  46.      * @return array
  47.      */
  48.     public function getFunctions(): array
  49.     {
  50.         return array(
  51.             new TwigFunction('menu', array($this'menu')),
  52.             new TwigFunction('menu_item_link', array($this'menuItemLink')),
  53.         );
  54.     }
  55.     /**
  56.      * @param string $reference
  57.      * @return BaseMenu
  58.      */
  59.     public function menu(string $reference): ?MenuInterface
  60.     {
  61.         if (!$this->menuProvider->exists($reference)) {
  62.             $this->menuManager->getOrCreateMenu($reference);
  63.             $this->menuProvider->loadFromManagers();
  64.         }
  65.         return $this->menuProvider->getMenu($reference);
  66.     }
  67.     /**
  68.      * @param BaseMenuItem $menuItem
  69.      * @return string|array
  70.      */
  71.     public function menuItemLink(BaseMenuItem $menuItem)
  72.     {
  73.         if (null !== $factory $this->menuItemFactoryProvider->getMenuItemFactory($menuItem->getFactory())) {
  74.             return $factory->buildLink($menuItem->getLink());
  75.         }
  76.         return null;
  77.     }
  78. }