src/Controller/LocaleRedirectController.php line 21

  1. <?php
  2. namespace App\Controller;
  3. use App\Service\GeolocationService;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpFoundation\Session\Session;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. class LocaleRedirectController extends AbstractController
  10. {
  11.     private $geolocationService;
  12.     public function __construct(GeolocationService $geolocationService)
  13.     {
  14.         $this->geolocationService $geolocationService;
  15.     }
  16.     #[Route('/'name'app_redirect')]
  17.     public function redirectToLocale(Request $request,Session $session): RedirectResponse
  18.     {
  19.         if(!$session->has('country_code')){
  20.             # getting ip
  21.             $ip $request->getClientIp(); 
  22.             $countryCode $this->geolocationService->getCountryCode($ip);
  23.             $session->set('country_code',$countryCode);
  24.         }else{
  25.             $countryCode $session->get('country_code');
  26.         }
  27.         $localeMap = [
  28.             'US' => 'en',
  29.             'FR' => 'fr',
  30.             'DE' => 'de',
  31.             'ES' => 'es',
  32.             'IT' => 'it'
  33.         ];
  34.         $locale $localeMap[$countryCode] ?? 'en';
  35.         
  36.         $session $request->getSession();
  37.         if($gender $session->get('gender')){
  38.             $redirectRoute $gender == "mens" "app_home_men" "app_home_women";
  39.         }else{
  40.             $redirectRoute "app_home";
  41.         }
  42.         return $this->redirectToRoute($redirectRoute, ['_locale' => $locale]);
  43.     }
  44. }