vendor/wearemarketing/webcontentbundle/Twig/MenuExtension.php line 60

Open in your IDE?
  1. <?php
  2. namespace WAM\Bundle\WebContentBundle\Twig;
  3. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  4. use Twig\Environment;
  5. use Twig\Extension\AbstractExtension;
  6. use Twig\TwigFunction;
  7. use WAM\Bundle\WebContentBundle\Repository\Interfaces\MenuItemRepositoryInterface;
  8. /**
  9.  * Twig extension to render all items form a menu.
  10.  *
  11.  * @author Edgar Tébar <etebar@wearemarketing.com>
  12.  */
  13. class MenuExtension extends AbstractExtension
  14. {
  15.     private MenuItemRepositoryInterface $menuRepository;
  16.     private array $config;
  17.     /**
  18.      * MenuExtension constructor.
  19.      * @param MenuItemRepositoryInterface $menuRepository
  20.      * @param array $config
  21.      */
  22.     public function __construct(MenuItemRepositoryInterface $menuRepository, array $config)
  23.     {
  24.         $this->menuRepository $menuRepository;
  25.         $this->config $config;
  26.     }
  27.     /**
  28.      * @return array
  29.      */
  30.     public function getFunctions()
  31.     {
  32.         return array(
  33.             new TwigFunction('render_menu', array($this'renderMenu'), array('needs_environment' => true'is_safe' => array('html'))),
  34.             new TwigFunction('get_menu_items', array($this'getMenuItems')),
  35.         );
  36.     }
  37.     /**
  38.      * @param $menu
  39.      * @param array $options
  40.      *
  41.      * @return mixed
  42.      */
  43.     public function renderMenu(Environment $twigstring $menu, array $options = array())
  44.     {
  45.         $options array_merge(
  46.             $options,
  47.             array(
  48.                 'items' => $this->menuRepository->getParents($menu),
  49.             )
  50.         );
  51.         return $twig->render(
  52.             $this->getTemplateFormMenu($menu)
  53.             , $options
  54.         );
  55.     }
  56.     /**
  57.      * @param $menu
  58.      *
  59.      * @return mixed
  60.      */
  61.     public function getMenuItems(string $menu)
  62.     {
  63.         return $this->menuRepository->getParents($menu);
  64.     }
  65.     /**
  66.      * Returns the name of the extension.
  67.      *
  68.      * @return string The extension name
  69.      */
  70.     public function getName()
  71.     {
  72.         return 'wam.menu.twig.extension';
  73.     }
  74.     private function getTemplateFormMenu($menu)
  75.     {
  76.         if (!isset($this->config['templates'][$menu])) {
  77.             throw new FileException(sprintf('Its necessary define a template to render %s menu'$menu));
  78.         }
  79.         return $this->config['templates'][$menu];
  80.     }
  81. }