src/EventSubscriber/RedirectToLocaleSubscriber.php line 73
<?php/** This file is part of the Tabler-Bundle demo.* Copyright 2021 Kevin Papst - www.kevinpapst.de** For the full copyright and license information, please view the LICENSE* file that was distributed with this source code.*/namespace App\EventSubscriber;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpKernel\Event\RequestEvent;use Symfony\Component\HttpKernel\KernelEvents;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;/*** When visiting the homepage, this listener redirects the user to the most* appropriate localized version according to the browser settings.** See http://symfony.com/doc/current/components/http_kernel/introduction.html#the-kernel-request-event** @author Oleg Voronkovich <oleg-voronkovich@yandex.ru>*/class RedirectToLocaleSubscriber implements EventSubscriberInterface{/*** List of supported locales.** @var string[]*/private array $locales = [];private string $defaultLocale = '';private UrlGeneratorInterface $urlGenerator;public function __construct(UrlGeneratorInterface $urlGenerator, string $locales, ?string $defaultLocale = null){$this->urlGenerator = $urlGenerator;$this->locales = explode('|', trim($locales));if (empty($this->locales)) {throw new \UnexpectedValueException('The list of supported locales must not be empty.');}$this->defaultLocale = $defaultLocale ?: $this->locales[0];if (!in_array($this->defaultLocale, $this->locales)) {//throw new \UnexpectedValueException(sprintf('The default locale ("%s") must be one of "%s".', $this->defaultLocale, $locales));}// Add the default locale at the first position of the array,// because Symfony\HttpFoundation\Request::getPreferredLanguage// returns the first element when no an appropriate language is foundarray_unshift($this->locales, $this->defaultLocale);$this->locales = array_unique($this->locales);}/*** @return array*/public static function getSubscribedEvents(): array{return [KernelEvents::REQUEST => ['onKernelRequest', 1000],];}public function onKernelRequest(RequestEvent $event){$request = $event->getRequest();// Ignore sub-requests and all URLs but the homepageif ('/' !== $request->getPathInfo()) {return;}// Ignore requests from referrers with the same HTTP host in order to prevent// changing language for users who possibly already selected it for this application.if (0 === stripos($request->headers->get('referer'), $request->getSchemeAndHttpHost())) {return;}$preferredLanguage = $request->getPreferredLanguage($this->locales);$response = new RedirectResponse($this->urlGenerator->generate('app_dashboard', ['_locale' => 'ar']));$event->setResponse($response);}}