LocaleListener.php in Zircon Profile 8.0
File
vendor/symfony/http-kernel/EventListener/LocaleListener.php
View source
<?php
namespace Symfony\Component\HttpKernel\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\RequestContextAwareInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class LocaleListener implements EventSubscriberInterface {
private $router;
private $defaultLocale;
private $requestStack;
public function __construct($defaultLocale = 'en', RequestContextAwareInterface $router = null, RequestStack $requestStack = null) {
$this->defaultLocale = $defaultLocale;
$this->requestStack = $requestStack;
$this->router = $router;
}
public function setRequest(Request $request = null) {
@trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
if (null === $request) {
return;
}
$this
->setLocale($request);
$this
->setRouterContext($request);
}
public function onKernelRequest(GetResponseEvent $event) {
$request = $event
->getRequest();
$request
->setDefaultLocale($this->defaultLocale);
$this
->setLocale($request);
$this
->setRouterContext($request);
}
public function onKernelFinishRequest(FinishRequestEvent $event) {
if (null === $this->requestStack) {
return;
}
if (null !== ($parentRequest = $this->requestStack
->getParentRequest())) {
$this
->setRouterContext($parentRequest);
}
}
private function setLocale(Request $request) {
if ($locale = $request->attributes
->get('_locale')) {
$request
->setLocale($locale);
}
}
private function setRouterContext(Request $request) {
if (null !== $this->router) {
$this->router
->getContext()
->setParameter('_locale', $request
->getLocale());
}
}
public static function getSubscribedEvents() {
return array(
KernelEvents::REQUEST => array(
array(
'onKernelRequest',
16,
),
),
KernelEvents::FINISH_REQUEST => array(
array(
'onKernelFinishRequest',
0,
),
),
);
}
}