/**
  * @param GetResponseEvent $event
  */
 public function onKernelRequest(GetResponseEvent $event)
 {
     // don't redirect in dev
     if ($this->isDebug) {
         return;
     }
     $request = $event->getRequest();
     $locale = $request->attributes->get('_locale');
     // nothing to do here, not a URL that has to do with _locale route param
     if (null === $locale) {
         return;
     }
     // locale exists and is enabled, nothing to do here - return;
     if ($this->manager->isLocaleEnabled($locale)) {
         return;
     }
     $route = $request->attributes->get('_route');
     // no route found, nothing to do here - return; and let the 404 handler do its job
     if (null === $route) {
         return;
     }
     $params = array_replace_recursive($request->attributes->get('_route_params', []), ['_locale' => $this->usePreferredLocale ? $this->manager->getPreferredLocale() : $this->manager->getDefaultLocale()]);
     // generate a url for the same route with the same params, but with the default locale
     $url = $this->router->generate($route, $params, UrlGeneratorInterface::ABSOLUTE_URL);
     // append query string if any
     $qs = $request->getQueryString();
     if ($qs) {
         $url = $url . '?' . $qs;
     }
     $response = new RedirectResponse($url, Response::HTTP_FOUND);
     $event->setResponse($response);
 }
Esempio n. 2
0
 /**
  * @param OptionsResolverInterface $resolver
  */
 public function setDefaultOptions(OptionsResolverInterface $resolver)
 {
     $locales = $this->manager->getLocales();
     $choices = [];
     /** @var Locale $locale */
     foreach ($locales as $locale) {
         if ($locale->getIsEnabled()) {
             $choices[$locale->getLocale()] = $locale->getName();
         }
     }
     $resolver->setDefaults(['choices' => $choices]);
 }