src/Controller/Front/SitemapController.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Repository\ArticleRepository;
  4. use App\Repository\CourseRepository;
  5. use App\Repository\UserRepository;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\RouterInterface;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. class SitemapController extends AbstractController
  11. {
  12.     #[Route('/sitemap.xml'name'sitemap')]
  13.     public function sitemap(CourseRepository $courseRepoArticleRepository $articleRepositoryUserRepository $userRepositoryRouterInterface $router)
  14.     {
  15.         $dom = new \DOMDocument('1.0''UTF-8');
  16.         $dom->formatOutput true;
  17.         $urlset $dom->createElement('urlset');
  18.         $urlset->setAttribute('xmlns''http://www.sitemaps.org/schemas/sitemap/0.9');
  19.         $locales = ['fr''en''es''pt''it''de''sv''nl'];
  20.         // ✅ Routes statiques
  21.         $staticRoutes = ['homepage''user_login''membership_presentation''courses''directory''blog''tutos'];
  22.         foreach ($staticRoutes as $routeName) {
  23.             foreach ($locales as $locale) {
  24.                 $url $router->generate($routeName, ['_locale' => $locale], RouterInterface::ABSOLUTE_URL);
  25.                 $urlNode $dom->createElement('url');
  26.                 $urlNode->appendChild($dom->createElement('loc'$url));
  27.                 $urlNode->appendChild($dom->createElement('changefreq''weekly'));
  28.                 $urlNode->appendChild($dom->createElement('priority''0.8'));
  29.                 $urlset->appendChild($urlNode);
  30.             }
  31.         }
  32.         // ✅ Routes dynamiques (cours)
  33.         foreach ($courseRepo->findActiveCourses() as $course) {
  34.             foreach ($locales as $locale) {
  35.                 $url $router->generate('view_course', [
  36.                     'token' => $course->getToken(),
  37.                     '_locale' => $locale,
  38.                 ], RouterInterface::ABSOLUTE_URL);
  39.                 $urlNode $dom->createElement('url');
  40.                 $urlNode->appendChild($dom->createElement('loc'$url));
  41.                 $urlNode->appendChild($dom->createElement('lastmod'date('c')));
  42.                 $urlNode->appendChild($dom->createElement('changefreq''weekly'));
  43.                 $urlNode->appendChild($dom->createElement('priority''0.8'));
  44.                 $urlset->appendChild($urlNode);
  45.             }
  46.         }
  47.         // ✅ Routes dynamiques (articles)
  48.         foreach ($locales as $locale) {
  49.             foreach ($articleRepository->getLatestNews($locale)->getResult() as $article) {
  50.                 $url $router->generate('show_article', [
  51.                     'slug' => $article->getSlug(),
  52.                     '_locale' => $locale,
  53.                 ], RouterInterface::ABSOLUTE_URL);
  54.                 $urlNode $dom->createElement('url');
  55.                 $urlNode->appendChild($dom->createElement('loc'$url));
  56.                 $urlNode->appendChild($dom->createElement('lastmod'date('c')));
  57.                 $urlNode->appendChild($dom->createElement('changefreq''weekly'));
  58.                 $urlNode->appendChild($dom->createElement('priority''0.8'));
  59.                 $urlset->appendChild($urlNode);
  60.             }
  61.         }
  62.         // ✅ Routes dynamiques (pros)
  63.         foreach ($userRepository->findPros() as $pro) {
  64.             foreach ($locales as $locale) {
  65.                 $url $router->generate('view_pro', [
  66.                     'slug' => $pro->getSlug(),
  67.                     'type' => $pro->getProType(),
  68.                     '_locale' => $locale,
  69.                 ], RouterInterface::ABSOLUTE_URL);
  70.                 $urlNode $dom->createElement('url');
  71.                 $urlNode->appendChild($dom->createElement('loc'$url));
  72.                 $urlNode->appendChild($dom->createElement('lastmod'date('c')));
  73.                 $urlNode->appendChild($dom->createElement('changefreq''weekly'));
  74.                 $urlNode->appendChild($dom->createElement('priority''0.8'));
  75.                 $urlset->appendChild($urlNode);
  76.             }
  77.         }
  78.         $dom->appendChild($urlset);
  79.         return new Response($dom->saveXML(), 200, [
  80.             'Content-Type' => 'application/xml',
  81.         ]);
  82.     }
  83. }