<?php
namespace App\EventSubscriber\Content;
use App\Form\Content\LocaleForm;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class LocalizationSubscriber implements EventSubscriberInterface
{
private FormFactoryInterface $formFactory;
private string $locale;
public function __construct(string $locale, FormFactoryInterface $formFactory)
{
$this->locale = $locale;
$this->formFactory = $formFactory;
}
public function onKernelRequest(RequestEvent $event): void
{
$form = $this->formFactory->create(LocaleForm::class, array('locale'=>$this->locale), array(
'action' =>$event->getRequest()->getUri(),
'method' => 'POST'
))->handleRequest($event->getRequest());
if ($form->isSubmitted() && $form->isValid()) {
// $referer = $event->getRequest()->headers->get('referer');
$event->getRequest()->setLocale($form->getData()['locale']);
}
}
public function onKernelController(ControllerEvent $event)
{
// $controller = $event->getController();
/*
* $controller passed can be either a class or a Closure.
* This is not usual in Symfony but it may happen.
* If it is a class, it comes in array format
*/
// if (!is_array($controller)) {
// return;
// }
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => [['onKernelRequest', 16]],
KernelEvents::CONTROLLER => 'onKernelController',
];
}
}