Completed
Pull Request — 2.x (#251)
by
unknown
02:11 queued 40s
created

LocaleSubscriber::onKernelRequest()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 17
rs 9.7
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Sonata Project package.
5
 *
6
 * (c) Thomas Rabaix <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Sonata\TranslationBundle\EventSubscriber;
13
14
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
15
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
16
use Symfony\Component\HttpKernel\KernelEvents;
17
18
/**
19
 * @author Jonathan Vautrin <[email protected]>
20
 */
21
final class LocaleSubscriber implements EventSubscriberInterface
22
{
23
    /**
24
     * @var string
25
     */
26
    private $defaultLocale;
27
28
    /**
29
     * @param string $defaultLocale
30
     */
31
    public function __construct($defaultLocale = 'en')
32
    {
33
        $this->defaultLocale = $defaultLocale;
34
    }
35
36
    /**
37
     * @param GetResponseEvent $event
38
     */
39
    public function onKernelRequest(GetResponseEvent $event)
40
    {
41
        $request = $event->getRequest();
42
        if (!$request->hasPreviousSession()) {
43
            return;
44
        }
45
46
        // try to see if the locale has been set as a _locale routing parameter
47
        if ($locale = $request->attributes->get('_locale')) {
48
            $request->getSession()->set('_locale', $locale);
49
50
            return;
51
        }
52
53
        // if no explicit locale has been set on this request, use one from the session
54
        $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
55
    }
56
57
    /**
58
     * @return array
59
     */
60
    public static function getSubscribedEvents()
61
    {
62
        return [
63
            // must be registered before (i.e. with a higher priority than) the default Locale listener
64
            KernelEvents::REQUEST => [['onKernelRequest', 20]],
65
        ];
66
    }
67
}
68