src/EventSubscriber/LocaleSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\Event\RequestEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. use Symfony\Component\Security\Core\Security;
  7. class LocaleSubscriber implements EventSubscriberInterface
  8. {
  9. private Security $security;
  10. public function __construct(Security $security)
  11. {
  12. $this->security = $security;
  13. }
  14. public function onKernelRequest(RequestEvent $event): void
  15. {
  16. $request = $event->getRequest();
  17. $locale = 'fr'; // langue par défaut
  18. // 1️⃣ utilisateur connecté
  19. $user = $this->security->getUser();
  20. if ($user && method_exists($user, 'getLocale') && $user->getLocale()) {
  21. $locale = $user->getLocale();
  22. }
  23. // 2️⃣ session
  24. elseif ($request->hasSession() && $request->getSession()->has('_locale')) {
  25. $locale = $request->getSession()->get('_locale');
  26. }
  27. // 3️⃣ cookie
  28. elseif ($request->cookies->has('_locale')) {
  29. $locale = $request->cookies->get('_locale');
  30. }
  31. $request->setLocale($locale);
  32. }
  33. public static function getSubscribedEvents(): array
  34. {
  35. return [
  36. KernelEvents::REQUEST => ['onKernelRequest', 100],
  37. ];
  38. }
  39. }