src/AutomarketBundle/Controller/SiteMapController.php line 124

Open in your IDE?
  1. <?php
  2. namespace AutomarketBundle\Controller;
  3. use AutomarketBundle\Services\SeoService;
  4. use CoreBundle\Component\CoreFormFactory;
  5. use CoreBundle\Entity\Post;
  6. use CoreBundle\Entity\Vehicles\Vehicle;
  7. use CoreBundle\Model\Vehicles\Repository;
  8. use CoreBundle\Model\Vehicles\VehicleType;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use PortalBundle\Model\SeoMetaTag;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\RouterInterface;
  14. use Symfony\Component\Yaml\Yaml;
  15. class SiteMapController extends BaseController
  16. {
  17.     private SeoService $seoService;
  18.     public function __construct(CoreFormFactory $coreFormFactoryRequestStack $requestStackEntityManagerInterface $em,
  19.                                 SeoMetaTag      $seoMetaTagSeoService $seoService)
  20.     {
  21.         parent::__construct($coreFormFactory$requestStack$em$seoMetaTag);
  22.         $this->seoService $seoService;
  23.     }
  24.     public function siteMap(RouterInterface $routerRepository $vehicleRepository\CoreBundle\Factory\Vehicle $vehicleFactory): Response
  25.     {
  26.         $root $this->getParameter('kernel.project_dir');
  27.         $routingFile $root '/src/AutomarketBundle/Resources/config/routing/sitemap.yml';
  28.         $routes Yaml::parseFile($routingFile);
  29.         $result = [];
  30.         foreach ($routes as $rName => $route) {
  31.             if (
  32.                 in_array(
  33.                     $rName,
  34.                     [
  35.                         'automarket_car',
  36.                         'automarket_seo_catalog',
  37.                         'automarket_vacancy_single',
  38.                         'automarket_news_single',
  39.                         'automarket_about_vacancy_id',
  40.                         'automarket_catalog_vehicle_collections',
  41.                         'automarket_catalog',
  42.                         'automarket_catalog_characteristic',
  43.                         'automarket_catalog_price',
  44.                         'automarket_catalog_brand',
  45.                         'automarket_catalog_brand_model',
  46.                         'automarket_catalog_brand_model_price',
  47.                         'automarket_catalog_brand_characteristic',
  48.                         'automarket_catalog_brand_model_characteristic',
  49.                         'automarket_catalog_brand_model_characteristic_price',
  50.                         'automarket_vehicle',
  51.                         'automarket_catalog_characteristic_by_body',
  52.                     ]
  53.                 )
  54.             ) {
  55.                 continue;
  56.             }
  57.             $result[] = [
  58.                 'url' => $router->generate($rName),
  59.                 'priority' => '0.1',
  60.                 'changefreq' => 'yearly',
  61.             ];
  62.         }
  63.         $this->seoService->initModelRangePage();
  64.         foreach ($this->seoService->getVehicleDataUrl() as $item) {
  65.             if (array_key_exists('model'$item['parameters']) && $item['parameters']['model'] == '') {
  66.                 continue;
  67.             }
  68.             $result[] = [
  69.                 'url' => $router->generate($item['name'], $item['parameters']),
  70.                 'priority' => '0.8',
  71.                 'changefreq' => 'daily',
  72.             ];
  73.         }
  74.         $vehicles $vehicleRepository->getUsedVehicles();
  75.         /** @var Vehicle $vehicle */
  76.         foreach ($vehicles as $vehicle) {
  77.             if (!$vehicle->getModel()->getUrl()) {
  78.                 continue;
  79.             }
  80.             if (!$vehicle->getState()) {
  81.                 continue;
  82.             }
  83.             $vehicle $vehicleFactory->createByEntity($vehicle);
  84.             if (!$vehicle) {
  85.                 continue;
  86.             }
  87.             $vehicleTypeData VehicleType::getTypeDataById($vehicle->getVehicleType());
  88.             $result[] = [
  89.                 'url' => $router->generate('automarket_vehicle', ['state' => 'used''type' => $vehicleTypeData['url'], 'brand' => $vehicle->getModel()->getBrand()->getUrl(), 'model' => $vehicle->getModel()->getUrl(), 'id' => $vehicle->getVehicleId()]),
  90.                 'priority' => '0.8',
  91.                 'changefreq' => 'daily',
  92.             ];
  93.         }
  94.         $post $this->em->getRepository(Post::class)
  95.             ->findBy(['dealer' => $this->getDealer(), 'state' => 1]);
  96.         /** @var Post $one */
  97.         foreach ($post as $one) {
  98.             $result[] = [
  99.                 'url' => $router->generate('automarket_news_single', ['url' => $one->getUrl()]),
  100.                 'priority' => '0.2',
  101.                 'changefreq' => 'monthly',
  102.             ];
  103.         }
  104.         $response $this->baseAutomarketRender('@DcSite/sitemap.xml.twig', ['urls' => $result'route' => 'ford_sitemap']);
  105.         $response->headers->set('Content-Type''application/xml');
  106.         $response->setCharset('utf-8');
  107.         return $response;
  108.     }
  109. }