src/Event/EventSubscriber/Sitemap/CitiesListSitemapSubscriber.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 CitiesListSitemapSubscriber implements EventSubscriberInterface
  9. {
  10.     private BrcClient $brcClient;
  11.     private int $citiesLimit;
  12.     public function __construct(BrcClient $brcClientint $citiesLimit)
  13.     {
  14.         $this->brcClient $brcClient;
  15.         $this->citiesLimit $citiesLimit;
  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.         $total $this->brcClient->getTotalCitiesWithVisibleProfiles();
  29.         $totalPages = (int)ceil($total $this->citiesLimit);
  30.         $urls $event->getUrlContainer();
  31.         $router $event->getUrlGenerator();
  32.         for ($page 1$page <= $totalPages$page++) {
  33.             $urls->addUrl(
  34.                 new UrlConcrete(
  35.                     $router->generate(
  36.                         'city_list',
  37.                         $this->generateRouteParameters($page),
  38.                         UrlGeneratorInterface::ABSOLUTE_URL
  39.                     )
  40.                 ),
  41.                 'cities_list'
  42.             );
  43.         }
  44.     }
  45.     /**
  46.      * 
  47.      * @param int|null $page
  48.      * @return array
  49.      */
  50.     private function generateRouteParameters(?int $page): array
  51.     {
  52.         if ($page && $page 1) {
  53.             return ['page' => $page];
  54.         }
  55.         return [];
  56.     }
  57. }