src/Event/EventSubscriber/Sitemap/CompaniesSitemapSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Event\EventSubscriber\Sitemap;
  3. use App\Api\BrcBackend\BrcClient;
  4. use Presta\SitemapBundle\Event\SitemapPopulateEvent;
  5. use Presta\SitemapBundle\Sitemap\Url\UrlConcrete;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. final class CompaniesSitemapSubscriber implements EventSubscriberInterface
  9. {
  10.     private BrcClient $brcClient;
  11.     private int $companiesLimit;
  12.     public function __construct(BrcClient $brcClientint $companiesLimit)
  13.     {
  14.         $this->brcClient $brcClient;
  15.         $this->companiesLimit $companiesLimit;
  16.     }
  17.     /**
  18.      * @inheritDoc
  19.      */
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             SitemapPopulateEvent::class => 'populate',
  24.         ];
  25.     }
  26.     public function populate(SitemapPopulateEvent $event): void
  27.     {
  28.         $urls $event->getUrlContainer();
  29.         $router $event->getUrlGenerator();
  30.         $profiles $this->brcClient->getProfilesSitemap();
  31.         foreach ($profiles as $profileItem) {
  32.             $urls->addUrl(
  33.                 new UrlConcrete(
  34.                     $router->generate(
  35.                         'company_show',
  36.                         ['id' => $profileItem->getId(), 'slug' => $profileItem->getSlug()],
  37.                         UrlGeneratorInterface::ABSOLUTE_URL
  38.                     )
  39.                 ),
  40.                 'companies'
  41.             );
  42.         }
  43.         $totalPages = (int)ceil(count($profiles) / $this->companiesLimit);
  44.         for ($page 1$page <= $totalPages$page++) {
  45.             $urls->addUrl(
  46.                 new UrlConcrete(
  47.                     $router->generate(
  48.                         'company_list',
  49.                         $this->generateRouteParameters($page),
  50.                         UrlGeneratorInterface::ABSOLUTE_URL
  51.                     )
  52.                 ),
  53.                 'companies_list'
  54.             );
  55.         }
  56.     }
  57.     /**
  58.      * 
  59.      * @param int|null $page
  60.      * @return array
  61.      */
  62.     private function generateRouteParameters(?int $page): array
  63.     {
  64.         if ($page && $page 1) {
  65.             return ['page' => $page];
  66.         }
  67.         return [];
  68.     }
  69. }