vendor/wearemarketing/routingbundle/Sitemap/RouteAlternatesGenerator.php line 56

Open in your IDE?
  1. <?php
  2. namespace WAM\Bundle\RoutingBundle\Sitemap;
  3. use Symfony\Cmf\Component\RoutingAuto\Model\AutoRouteInterface;
  4. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  5. use WAM\Bundle\CoreBundle\Manager\LocaleManager;
  6. use WAM\Bundle\RoutingBundle\Entity\Interfaces\RouteInterface;
  7. use WAM\Bundle\RoutingBundle\Repository\Interfaces\RouteRepositoryInterface;
  8. use WAM\Bundle\RoutingBundle\Sitemap\Interfaces\AlternatesGeneratorInterface;
  9. /**
  10.  * Class RouteAlternatesGenerator.
  11.  *
  12.  * @author Miguel Vilata <mvilata@wearemarketing.com>
  13.  * @author David Velasco <dvelasco@wearemarketing.com>
  14.  */
  15. class RouteAlternatesGenerator implements AlternatesGeneratorInterface
  16. {
  17.     /**
  18.      * @var RouteRepositoryInterface
  19.      */
  20.     private $routeRepository;
  21.     /**
  22.      * @var UrlGeneratorInterface
  23.      */
  24.     private $urlGenerator;
  25.     /**
  26.      * @var LocaleManager
  27.      */
  28.     private $localeManager;
  29.     /**
  30.      * RouteAlternatesGenerator constructor.
  31.      *
  32.      * @param RouteRepositoryInterface $routeRepository
  33.      * @param UrlGeneratorInterface $urlGenerator
  34.      * @param LocaleManager $localeManager
  35.      */
  36.     public function __construct(
  37.         RouteRepositoryInterface $routeRepository,
  38.         UrlGeneratorInterface $urlGenerator,
  39.         LocaleManager $localeManager
  40.     )
  41.     {
  42.         $this->routeRepository $routeRepository;
  43.         $this->urlGenerator $urlGenerator;
  44.         $this->localeManager $localeManager;
  45.     }
  46.     /**
  47.      * {@inheritdoc}
  48.      */
  49.     public function getAlternateRoutes($route)
  50.     {
  51.         if (!$this->handles($route)) {
  52.             return [];
  53.         }
  54.         $routes $this->getRoutesByCanonical($route->getCanonicalName());
  55.         if (count($routes) < 2) {
  56.             return [];
  57.         }
  58.         $alternates = [];
  59.         $alternateDefault = [];
  60.         foreach ($routes as $routeObject) {
  61.             if ($this->localeManager->isDisabledLocale($routeObject->getLocale())) {
  62.                 continue;
  63.             }
  64.             $hreflang $this->localeManager->getHreflang($routeObject->getLocale());
  65.             $url $this->generateUrl($routeObject, ['_locale' => $routeObject->getTag()]);
  66.             $alternates[] = [
  67.                 'url' => $url,
  68.                 'hreflang' => $hreflang,
  69.             ];
  70.             if ($this->localeManager->isDefaultHreflang($hreflang)) {
  71.                 $alternateDefault[] = [
  72.                     'url' => $url,
  73.                     'hreflang' => AlternatesGeneratorInterface::HREFLANG_X_DEFAULT,
  74.                 ];
  75.             }
  76.         }
  77.         if (count($alternates) < 2) {
  78.             return [];
  79.         }
  80.         return array_merge($alternates$alternateDefault);
  81.     }
  82.     public function handles($route)
  83.     {
  84.         return $route instanceof RouteInterface;
  85.     }
  86.     public function isSitemapRoute($route$locale)
  87.     {
  88.         if ($route->getType() == AutoRouteInterface::TYPE_REDIRECT) {
  89.             return false;
  90.         }
  91.         if ($route->getLocale() != $locale) {
  92.             return false;
  93.         }
  94.         return $route->getSitemapeable();
  95.     }
  96.     public function getMainRouteUrl($route$locale)
  97.     {
  98.         return $this->generateUrl($route, ['_locale' => $locale]);
  99.     }
  100.     /**
  101.      * @param string $canonicalName
  102.      *
  103.      * @return RouteInterface[]
  104.      */
  105.     private function getRoutesByCanonical(string $canonicalName): array
  106.     {
  107.         return $this->routeRepository->findPrimaryByCanonicalName($canonicalName);
  108.     }
  109.     /**
  110.      * @param RouteInterface $routeObject
  111.      * @param array $parameters
  112.      *
  113.      * @return string
  114.      */
  115.     private function generateUrl(RouteInterface $routeObject, array $parameters = []): string
  116.     {
  117.         return $this->urlGenerator->generate($routeObject$parametersUrlGeneratorInterface::ABSOLUTE_URL);
  118.     }
  119. }