<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\RedirectResponse;
class LocaleRedirectSubscriber implements EventSubscriberInterface
{
private $defaultLocale;
public function __construct(string $defaultLocale)
{
$this->defaultLocale = $defaultLocale;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
// Verificar si la ruta no contiene el prefijo del idioma
$locale = $request->getLocale();
if (!$request->attributes->get('_route') || strpos($request->getPathInfo(), "/$locale/") !== 0) {
// Obtener el idioma por defecto
$defaultLocale = $this->defaultLocale;
// Verificar si ya estamos en la URL deseada para evitar redirecciones infinitas
if ($locale !== $defaultLocale) {
// Redirigir al usuario a la misma ruta con el prefijo del idioma por defecto
$url = $request->getSchemeAndHttpHost() . '/' . $defaultLocale . $request->getPathInfo();
$event->setResponse(new RedirectResponse($url));
}
}
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
}