src/Controller/SitemapController.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Continent;
  4. use App\Entity\Destination;
  5. use App\Entity\Offer;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. class SitemapController extends AbstractController
  11. {
  12.     /**
  13.      * @Route("/sitemap.xml", name="sitemap", defaults={"_format"="xml"})
  14.      */
  15.     public function index(Request $request): Response
  16.     {
  17.         $em $this->getDoctrine()->getManager();
  18.         $baseUrl $request->getSchemeAndHttpHost();
  19.         $urls = [];
  20.         // ── Pages statiques ──
  21.         $staticPages = [
  22.             ['route' => '/',                                      'priority' => '1.0',  'changefreq' => 'weekly'],
  23.             ['route' => '/o-circuit',                             'priority' => '0.9',  'changefreq' => 'weekly'],
  24.             ['route' => '/o-escapade',                            'priority' => '0.9',  'changefreq' => 'weekly'],
  25.             ['route' => '/o-roadtrip',                            'priority' => '0.9',  'changefreq' => 'weekly'],
  26.             ['route' => '/o-croisiere',                           'priority' => '0.9',  'changefreq' => 'weekly'],
  27.             ['route' => '/o-tropik-agence-de-voyages-en-guadeloupe','priority' => '0.7''changefreq' => 'monthly'],
  28.             ['route' => '/o-contact',                             'priority' => '0.6',  'changefreq' => 'monthly'],
  29.             ['route' => '/demande-de-devis',                      'priority' => '0.8',  'changefreq' => 'monthly'],
  30.             ['route' => '/mentions-legales',                      'priority' => '0.3',  'changefreq' => 'yearly'],
  31.             ['route' => '/conditions-generales-utilisation',      'priority' => '0.3',  'changefreq' => 'yearly'],
  32.             ['route' => '/politique-de-confidentialite',          'priority' => '0.3',  'changefreq' => 'yearly'],
  33.         ];
  34.         foreach ($staticPages as $page) {
  35.             $urls[] = [
  36.                 'loc'        => $baseUrl $page['route'],
  37.                 'changefreq' => $page['changefreq'],
  38.                 'priority'   => $page['priority'],
  39.             ];
  40.         }
  41.         // ── Continents ──
  42.         $continents $em->getRepository(Continent::class)->findAll();
  43.         foreach ($continents as $continent) {
  44.             if (!$continent->getSlug()) {
  45.                 continue;
  46.             }
  47.             $urls[] = [
  48.                 'loc'        => $baseUrl '/continent/' $continent->getSlug(),
  49.                 'changefreq' => 'weekly',
  50.                 'priority'   => '0.7',
  51.             ];
  52.         }
  53.         // ── Offres publiees ──
  54.         $offers $em->getRepository(Offer::class)->findBy(['isPublish' => true]);
  55.         foreach ($offers as $offer) {
  56.             if (!$offer->getSlug() || !$offer->getType()) {
  57.                 continue;
  58.             }
  59.             $typeName strtolower($offer->getType()->getName());
  60.             $prefix '/o-circuit';
  61.             if (strpos($typeName'escapade') !== false) {
  62.                 $prefix '/o-escapade/destination';
  63.             } elseif (strpos($typeName'road') !== false) {
  64.                 $prefix '/o-roadtrip';
  65.             } elseif (strpos($typeName'croisi') !== false) {
  66.                 $prefix '/o-croisiere';
  67.             }
  68.             $urls[] = [
  69.                 'loc'        => $baseUrl $prefix '/' $offer->getSlug(),
  70.                 'changefreq' => 'weekly',
  71.                 'priority'   => '0.8',
  72.             ];
  73.         }
  74.         // ── Generation XML ──
  75.         $response = new Response();
  76.         $response->headers->set('Content-Type''text/xml');
  77.         return $this->render('sitemap.xml.twig', [
  78.             'urls' => $urls,
  79.         ], $response);
  80.     }
  81. }