src/Controller/LocaleRedirectController.php line 21
<?php
namespace App\Controller;
use App\Service\GeolocationService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Routing\Annotation\Route;
class LocaleRedirectController extends AbstractController
{
private $geolocationService;
public function __construct(GeolocationService $geolocationService)
{
$this->geolocationService = $geolocationService;
}
#[Route('/', name: 'app_redirect')]
public function redirectToLocale(Request $request,Session $session): RedirectResponse
{
if(!$session->has('country_code')){
# getting ip
$ip = $request->getClientIp();
$countryCode = $this->geolocationService->getCountryCode($ip);
$session->set('country_code',$countryCode);
}else{
$countryCode = $session->get('country_code');
}
$localeMap = [
'US' => 'en',
'FR' => 'fr',
'DE' => 'de',
'ES' => 'es',
'IT' => 'it'
];
$locale = $localeMap[$countryCode] ?? 'en';
$session = $request->getSession();
if($gender = $session->get('gender')){
$redirectRoute = $gender == "mens" ? "app_home_men" : "app_home_women";
}else{
$redirectRoute = "app_home";
}
return $this->redirectToRoute($redirectRoute, ['_locale' => $locale]);
}
}