]> Raphaël G. Git Repositories - airbundle/commitdiff
Switch on the fly locale with fb_locale=xx set
authorRaphaël Gertz <git@rapsys.eu>
Thu, 12 Aug 2021 15:36:47 +0000 (17:36 +0200)
committerRaphaël Gertz <git@rapsys.eu>
Thu, 12 Aug 2021 15:36:47 +0000 (17:36 +0200)
EventSubscriber/FacebookSubscriber.php [new file with mode: 0644]

diff --git a/EventSubscriber/FacebookSubscriber.php b/EventSubscriber/FacebookSubscriber.php
new file mode 100644 (file)
index 0000000..d950a54
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+
+namespace Rapsys\AirBundle\EventSubscriber;
+
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\HttpKernel\Event\ControllerEvent;
+use Symfony\Component\HttpKernel\Event\RequestEvent;
+use Symfony\Component\HttpKernel\Event\ResponseEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
+use Symfony\Component\Routing\RouterInterface;
+
+class FacebookSubscriber implements EventSubscriberInterface {
+       ///Supported locales array
+       private $locales;
+
+       ///Router instance
+       private $router;
+
+       /*
+        * Inject router interface and locales
+        *
+        * @param RouterInterface $router The router instance
+        * @param array $locales The supported locales
+        */
+       public function __construct(RouterInterface $router, array $locales) {
+               //Set locales
+               $this->locales = $locales;
+
+               //Set router
+               $this->router = $router;
+       }
+
+       /**
+        * Change locale for request with ?fb_locale=xx
+        *
+        * @param RequestEvent The request event
+        */
+       public function onKernelRequest(RequestEvent $event) {
+               //Retrieve request
+               $request = $event->getRequest();
+
+               //Check for facebook locale
+               if (
+                       $request->query->has('fb_locale') &&
+                       in_array($preferred = $request->query->get('fb_locale'), $this->locales)
+               ) {
+                       //Set locale
+                       $request->setLocale($preferred);
+
+                       //Set default locale
+                       $request->setDefaultLocale($preferred);
+
+                       //Get router context
+                       $context = $this->router->getContext();
+
+                       //Set context locale
+                       $context->setParameter('_locale', $preferred);
+
+                       //Set back router context
+                       $this->router->setContext($context);
+               }
+       }
+
+       /**
+        * Get subscribed events
+        *
+        * @return array The subscribed events
+        */
+       public static function getSubscribedEvents() {
+               return [
+                       // must be registered before the default locale listener
+                       KernelEvents::REQUEST => [['onKernelRequest', 10]]
+               ];
+       }
+}