src/EventListener/RequestListener.php line 64

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\EventListener;
  3. use Symfony\Component\HttpKernel\Event\RequestEvent;
  4. use Symfony\Component\Routing\RouterInterface;
  5. use Symfony\Contracts\Translation\LocaleAwareInterface;
  6. class RequestListener
  7. {
  8.     /**
  9.      * @var LocaleAwareInterface
  10.      */
  11.     private LocaleAwareInterface $locale;
  12.     /**
  13.      * @var string
  14.      */
  15.     private string $defaultLocale;
  16.     /**
  17.      * @var array|false|string[]
  18.      */
  19.     private array $enabledLocales;
  20.     /**
  21.      * @var RouterInterface
  22.      */
  23.     private RouterInterface $router;
  24.     /**
  25.      * @var string
  26.      */
  27.     private string $host;
  28.     /**
  29.      * RequestListener constructor.
  30.      * @param string $defaultLocale
  31.      * @param string $enabledLocales
  32.      * @param string $host
  33.      * @param LocaleAwareInterface $locale
  34.      * @param RouterInterface $router
  35.      */
  36.     public function __construct(
  37.         string $defaultLocale,
  38.         string $enabledLocales,
  39.         string $host,
  40.         LocaleAwareInterface $locale,
  41.         RouterInterface $router
  42.     )
  43.     {
  44.         $this->locale $locale;
  45.         $this->defaultLocale $defaultLocale;
  46.         $this->enabledLocales explode('|'$enabledLocales '|zh');
  47.         $this->router $router;
  48.         $this->host $host;
  49.     }
  50.     /**
  51.      * @param RequestEvent $event
  52.      */
  53.     public function onKernelRequest(RequestEvent $event): void
  54.     {
  55.         if (!$event->getRequest()->headers->has('X-Custom-Domain')) {
  56.             $this->router->getContext()->setHost($this->host);
  57.         }
  58.         $request $event->getRequest();
  59.         $newLocale $request->get('locale');
  60.         if (!$newLocale) {
  61.             $lang $this->defaultLocale;
  62.             $languages $request->getLanguages();
  63.             if (isset($languages[0])) {
  64.                 if (in_array(substr($languages[0], 02), $this->enabledLocales)) {
  65.                     $lang $languages[0];
  66.                 }
  67.             }
  68.             $newLocale substr($lang02);
  69.         }
  70.         $request->setLocale($newLocale);
  71.         $this->locale->setLocale($newLocale);
  72.     }
  73. }