src/EventListener/SitemapSubscriber.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Age;
  4. use App\Entity\Article;
  5. use App\Entity\Country;
  6. use App\Entity\Saison;
  7. use App\Entity\Sejour;
  8. use App\Entity\Theme;
  9. use App\Repository\BlogPostRepository;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  13. use Presta\SitemapBundle\Event\SitemapPopulateEvent;
  14. use Presta\SitemapBundle\Service\UrlContainerInterface;
  15. use Presta\SitemapBundle\Sitemap\Url\UrlConcrete;
  16. use Symfony\Component\String\Slugger\AsciiSlugger;
  17. class SitemapSubscriber implements EventSubscriberInterface
  18. {
  19. /**
  20. * @var EntityManagerInterface
  21. */
  22. private $em;
  23. private $router;
  24. private $slugger;
  25. /**
  26. * @param BlogPostRepository $blogPostRepository
  27. */
  28. public function __construct(EntityManagerInterface $em,UrlGeneratorInterface $router)
  29. {
  30. $this->em = $em;
  31. $this->router = $router;
  32. }
  33. /**
  34. * @inheritdoc
  35. */
  36. public static function getSubscribedEvents()
  37. {
  38. return [
  39. SitemapPopulateEvent::class => 'populate',
  40. ];
  41. }
  42. /**
  43. * @param SitemapPopulateEvent $event
  44. */
  45. public function populate(SitemapPopulateEvent $event): void
  46. {
  47. $this->registerActualite($event->getUrlContainer());
  48. $this->registerSejour($event->getUrlContainer());
  49. $this->registerColonies($event->getUrlContainer());
  50. }
  51. /**
  52. * @param UrlContainerInterface $urls
  53. */
  54. public function registerActualite(UrlContainerInterface $urls,): void
  55. {
  56. $posts = $this->em->getRepository(Article::class)->findBy(['type'=>'article','isActive'=> true]);
  57. $slugger = new AsciiSlugger();
  58. foreach ($posts as $post) {
  59. $urls->addUrl(
  60. new UrlConcrete(
  61. $this->router->generate(
  62. 'actualite',
  63. ['slug' => $slugger->slug(strtolower($post->getTitle()),'_'),
  64. 'id' => $post->getId()
  65. ],
  66. UrlGeneratorInterface::ABSOLUTE_URL
  67. )
  68. ),
  69. 'article'
  70. );
  71. }
  72. }
  73. /**
  74. * @param UrlContainerInterface $urls
  75. */
  76. public function registerSejour(UrlContainerInterface $urls,): void
  77. {
  78. $posts = $this->em->getRepository(Sejour::class)->findBy(['isActive'=> true]);
  79. $slugger = new AsciiSlugger();
  80. foreach ($posts as $post) {
  81. $urls->addUrl(
  82. new UrlConcrete(
  83. $this->router->generate(
  84. 'frontend_colonie-detail',
  85. ['slug' => $slugger->slug(strtolower($post->getTitle()),'-'),
  86. 'id' => $post->getId()
  87. ],
  88. UrlGeneratorInterface::ABSOLUTE_URL
  89. )
  90. ),
  91. 'sejour'
  92. );
  93. }
  94. }
  95. /**
  96. * @param UrlContainerInterface $urls
  97. */
  98. public function registerCOlonies(UrlContainerInterface $urls,): void
  99. {
  100. $posts = $this->em->getRepository(Saison::class)->findBy([]);
  101. $slugger = new AsciiSlugger();
  102. foreach ($posts as $post) {
  103. $urls->addUrl(
  104. new UrlConcrete(
  105. $this->router->generate(
  106. 'frontend_resa_dynamique_liste_colonies',
  107. ['path' =>$post->getSlug(),
  108. ],
  109. UrlGeneratorInterface::ABSOLUTE_URL
  110. )
  111. ),
  112. 'colonies'
  113. );
  114. }
  115. $posts = $this->em->getRepository(Theme::class)->findBy(['isActive'=> true]);
  116. foreach ($posts as $post) {
  117. $urls->addUrl(
  118. new UrlConcrete(
  119. $this->router->generate(
  120. 'frontend_resa_dynamique_liste_colonies',
  121. ['path' => $slugger->slug(strtolower($post->getTitle()),'_'),
  122. ],
  123. UrlGeneratorInterface::ABSOLUTE_URL
  124. )
  125. ),
  126. 'colonies'
  127. );
  128. }
  129. $posts = $this->em->getRepository(Age::class)->findBy([]);
  130. foreach ($posts as $post) {
  131. $urls->addUrl(
  132. new UrlConcrete(
  133. $this->router->generate(
  134. 'frontend_resa_dynamique_liste_colonies',
  135. ['path' => $slugger->slug(strtolower($post->getTitle()),'-'),
  136. ],
  137. UrlGeneratorInterface::ABSOLUTE_URL
  138. )
  139. ),
  140. 'colonies'
  141. );
  142. }
  143. $posts = $this->em->getRepository(Country::class)->findBy([]);
  144. foreach ($posts as $post) {
  145. $urls->addUrl(
  146. new UrlConcrete(
  147. $this->router->generate(
  148. 'frontend_resa_dynamique_liste_colonies',
  149. ['path' => $post->getSlug(),
  150. ],
  151. UrlGeneratorInterface::ABSOLUTE_URL
  152. )
  153. ),
  154. 'colonies'
  155. );
  156. }
  157. }
  158. }