src/Base/Sitemap/Sitemap.php line 56

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace App\Base\Sitemap;
  3. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepositoryInterface;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Doctrine\Persistence\ObjectRepository;
  6. use Presta\SitemapBundle\Event\SitemapPopulateEvent;
  7. use Presta\SitemapBundle\Service\UrlContainerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  10. abstract class Sitemap implements EventSubscriberInterface
  11. {
  12.     public function __construct(
  13.         protected UrlGeneratorInterface  $urlGenerator,
  14.         protected EntityManagerInterface $entityManager
  15.     ) {
  16.     }
  17.     /**
  18.      * Получить репозиторий по классу
  19.      */
  20.     protected function getRepository(string $className): ObjectRepository
  21.     {
  22.         return $this->entityManager->getRepository($className);
  23.     }
  24.     /**
  25.      * Получить все объекты класса с возможностью фильтрации
  26.      */
  27.     protected function findAll(string $className, array $criteria = []): array
  28.     {
  29.         return $this->getRepository($className)->findBy($criteria);
  30.     }
  31.     protected function url(string $name, array $parameters = []): string
  32.     {
  33.         return $this->urlGenerator->generate(
  34.             $name,
  35.             $parameters,
  36.             UrlGeneratorInterface::ABSOLUTE_URL
  37.         );
  38.     }
  39.     /**
  40.      * @inheritdoc
  41.      */
  42.     public static function getSubscribedEvents()
  43.     {
  44.         return [
  45.             SitemapPopulateEvent::ON_SITEMAP_POPULATE => 'populate',
  46.         ];
  47.     }
  48.     public function populate(SitemapPopulateEvent $event): void
  49.     {
  50.         $this->registerRoutes($event->getUrlContainer());
  51.     }
  52.     abstract public function registerRoutes(UrlContainerInterface $urls): void;
  53. }