src/EventSubscriber/LocaleSubscriber.php line 25

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\Event\ExceptionEvent;
  6. use \Twig\Environment;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use App\Entity\Platform;
  9. class LocaleSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * @var \Twig\Environment
  13.      */
  14.     private $twig;
  15.     
  16.     /**
  17.      * @var \Doctrine\ORM\EntityManager
  18.      */
  19.     private $em;
  20.     
  21.     public function __construct(Environment $twigEntityManagerInterface $em$defaultLocale 'en')
  22.     {
  23.         $this->defaultLocale $defaultLocale;
  24.         $this->twig    $twig;
  25.         $this->em $em;
  26.     }
  27.     public function onKernelRequest(RequestEvent $event)
  28.     {
  29.         $request $event->getRequest();
  30.         $platform $this->em->getRepository(Platform::class)->findOneByDomain($_SERVER['HTTP_HOST']);
  31.         if (!$platform) {
  32.             die();
  33.         }
  34.         $request->getSession()->set('platform'$platform);
  35.         $this->twig->addGlobal('platform'$platform);
  36.         // try to see if the locale has been set as a _locale routing parameter
  37.         if ($locale $request->attributes->get('_locale')) {
  38.             $request->getSession()->set('_locale'$locale);
  39.         } else {
  40.             if (!empty($request->getSession()->get('_locale'))) {
  41.                 $locale $request->getSession()->get('_locale');
  42.             } elseif (!empty($request->cookies->get('_locale'))) {
  43.                 $locale $request->cookies->get('_locale');
  44.             } elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
  45.                 $locale =  substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 02);
  46.             }
  47.             if (!in_array($locale,array('en','fr')))
  48.                 $locale 'en';
  49.             $request->setLocale($locale);
  50.         }
  51.     }
  52.     public static function getSubscribedEvents()
  53.     {
  54.         return [
  55.             'kernel.request' => 'onKernelRequest',
  56.         ];
  57.     }
  58. }