vendor/wearemarketing/routingbundle/Routing/TranslatableDynamicRouter.php line 49

Open in your IDE?
  1. <?php
  2. namespace WAM\Bundle\RoutingBundle\Routing;
  3. use Doctrine\ORM\EntityRepository;
  4. use Symfony\Cmf\Bundle\RoutingBundle\Routing\DynamicRouter;
  5. use WAM\Bundle\RoutingBundle\Repository\Interfaces\RouteRepositoryInterface;
  6. use WAM\Bundle\RoutingBundle\Repository\Interfaces\UrlRepositoryInterface;
  7. class TranslatableDynamicRouter extends DynamicRouter
  8. {
  9.     const LOCALE_PARAMETER '_locale';
  10.     private RouteRepositoryInterface $routeRepository;
  11.     private UrlRepositoryInterface $urlRepository;
  12.     /**
  13.      * Setter for UrlRepository.
  14.      *
  15.      * @param EntityRepository $urlRepository
  16.      *
  17.      * @return $this
  18.      */
  19.     public function setUrlRepository(UrlRepositoryInterface $urlRepository)
  20.     {
  21.         $this->urlRepository $urlRepository;
  22.         return $this;
  23.     }
  24.     /**
  25.      * Setter for RouteRepository.
  26.      *
  27.      * @param RouteRepositoryInterface $routeRepository
  28.      *
  29.      * @return $this
  30.      */
  31.     public function setRouteRepository(RouteRepositoryInterface $routeRepository)
  32.     {
  33.         $this->routeRepository $routeRepository;
  34.         return $this;
  35.     }
  36.     /**
  37.      * {@inheritdoc}
  38.      */
  39.     public function generate($name$parameters = [], $absolute false)
  40.     {
  41.         if (is_string($name)) {
  42.             $locale = isset($parameters[self::LOCALE_PARAMETER]) ?
  43.                 $parameters[self::LOCALE_PARAMETER] :
  44.                 $this->getRequest()->getLocale();
  45.             $route $this->findRoute($name$locale) ?: $this->findUrl($name);
  46.             return $route ?
  47.                 parent::generate($route$parameters$absolute) :
  48.                 null;
  49.         }
  50.         return;
  51.     }
  52.     private function findRoute($name$locale)
  53.     {
  54.         $candidates $this->routeRepository->findPrimaryByCanonicalName($name);
  55.         foreach ($candidates as $route) {
  56.             if ($this->checkLocaleRequirement($route$locale)) {
  57.                 return $route;
  58.             }
  59.         }
  60.         return;
  61.     }
  62.     private function findUrl($name)
  63.     {
  64.         return $this->urlRepository->getByName($name);
  65.     }
  66.     private function checkLocaleRequirement($route$locale)
  67.     {
  68.         return empty($locale)
  69.             || !$route->getRequirement(self::LOCALE_PARAMETER)
  70.             || preg_match('/' $route->getRequirement(self::LOCALE_PARAMETER) . '/'$locale);
  71.     }
  72. }