src/Event/EventSubscriber/Sitemap/CitiesProfilesSitemapSubscriber.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 CitiesProfilesSitemapSubscriber 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.         foreach ($this->brcClient->getCitiesProfilesSitemap() as $city) {
  31.             $totalPages = (int)ceil($city->getTotalProfiles() / $this->companiesLimit);
  32.             for ($page 1$page <= $totalPages$page++) {
  33.                 $urls->addUrl(
  34.                     new UrlConcrete(
  35.                         $router->generate(
  36.                             'city_companies_list',
  37.                             $this->generateRouteParameters($city->getId(), $city->getSlug(), $page),
  38.                             UrlGeneratorInterface::ABSOLUTE_URL
  39.                         )
  40.                     ),
  41.                     'city_companies_list'
  42.                 );
  43.             }
  44.         }
  45.     }
  46.     /**
  47.      * 
  48.      * @param int|null $page
  49.      * @return array
  50.      */
  51.     private function generateRouteParameters(int $cityIdstring $citySlug, ?int $page): array
  52.     {
  53.         if ($page && $page 1) {
  54.             return ['id' => $cityId'slug' => $citySlug'page' => $page];
  55.         }
  56.         return ['id' => $cityId'slug' => $citySlug];
  57.     }
  58. }