src/Controller/Custom/MenuController.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Custom;
  3. use App\Entity\Menu;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Sylius\Component\Taxonomy\Repository\TaxonRepositoryInterface;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  10. class MenuController extends AbstractController
  11. {
  12.     /** @var TaxonRepositoryInterface */
  13.     protected TaxonRepositoryInterface $taxonRepository;
  14.     /** @var EntityManagerInterface */
  15.     protected EntityManagerInterface $em;
  16.     /**
  17.      * @param TaxonRepositoryInterface $taxonRepository
  18.      * @param EntityManagerInterface $em
  19.      */
  20.     public function __construct(TaxonRepositoryInterface $taxonRepositoryEntityManagerInterface $em)
  21.     {
  22.         $this->taxonRepository $taxonRepository;
  23.         $this->em $em;
  24.     }
  25.     /**
  26.      * @param Request $request
  27.      * @param string $type
  28.      * @return Response
  29.      */
  30.     public function renderMenu(Request $requeststring $type): Response
  31.     {
  32.         $locale $request->getLocale();
  33.         $menu = [
  34.             'products' => $this->taxonRepository->findAll(),
  35.             'commercial_agreements' => [
  36.                 'url' => '',
  37.                 'parents' => []
  38.             ],
  39.             'partners' => [
  40.                 'url' => '',
  41.                 'parents' => []
  42.             ]
  43.         ];
  44.         // Commercial Agreements
  45.         $commercialAgreements $this->em->getRepository(Menu::class)->findBy(['category' => 1]);
  46.         foreach ($commercialAgreements as $agreement) {
  47.             $url $agreement->getPage() ?
  48.                 $this->generateUrl('monsieurbiz_cms_page_show', ['slug' => $agreement->getPage()->getTranslation($locale)->getSlug()]) :
  49.                 null
  50.             ;
  51.             $menu['commercial_agreements']['parents'][$agreement->getId()] = [
  52.                 'id' => $agreement->getId(),
  53.                 'name' => $agreement->getName(),
  54.                 'position' => $agreement->getPosition(),
  55.                 'url' => $url
  56.             ];
  57.             foreach ($agreement->getChildren() as $child) {
  58.                 $url $child->getPage() ?
  59.                     $this->generateUrl(
  60.                         'monsieurbiz_cms_page_show',
  61.                         ['slug' => $child->getPage()->getTranslation($locale)->getSlug()],
  62.                         UrlGeneratorInterface::ABSOLUTE_URL
  63.                     ) :
  64.                     null
  65.                 ;
  66.                 $menu['commercial_agreements']['parents'][$agreement->getId()]['children'][$child->getId()] = [
  67.                     'id' => $child->getId(),
  68.                     'name' => $child->getName(),
  69.                     'position' => $child->getPosition(),
  70.                     'url' => $url
  71.                 ];
  72.             }
  73.         }
  74.         // Partners
  75.         $partners $this->em->getRepository(Menu::class)->findBy(['category' => 2]);
  76.         foreach ($partners as $partner) {
  77.             $url $partner->getPage() ?
  78.                 $this->generateUrl(
  79.                     'monsieurbiz_cms_page_show',
  80.                     ['slug' => $partner->getPage()->getTranslation($locale)->getSlug()],
  81.                     UrlGeneratorInterface::ABSOLUTE_URL
  82.                 ) :
  83.                 null
  84.             ;
  85.             $menu['partners']['parents'][$partner->getId()] = [
  86.                 'id' => $partner->getId(),
  87.                 'name' => $partner->getName(),
  88.                 'position' => $partner->getPosition(),
  89.                 'url' => $url
  90.             ];
  91.             foreach ($partner->getChildren() as $child) {
  92.                 $url $child->getPage() ?
  93.                     $this->generateUrl(
  94.                         'monsieurbiz_cms_page_show',
  95.                         ['slug' => $child->getPage()->getTranslation($locale)->getSlug()],
  96.                         UrlGeneratorInterface::ABSOLUTE_URL
  97.                     ) :
  98.                     null
  99.                 ;
  100.                 $menu['partners']['parents'][$partner->getId()]['children'][] = [
  101.                     'id' => $child->getId(),
  102.                     'name' => $child->getName(),
  103.                     'position' => $child->getPosition(),
  104.                     'url' => $url
  105.                 ];
  106.             }
  107.         }
  108.         $template $type === 'top' ?
  109.             'bundles/SyliusShopBundle/Layout/TopMenu/_top_menu.html.twig' :
  110.             'bundles/SyliusShopBundle/Layout/TopMenu/_sidebar_menu.html.twig'
  111.         ;
  112.         return $this->render($template, [
  113.             'menu' => $menu ?? []
  114.         ]);
  115.     }
  116. }