12
12
namespace Symfony \Component \HttpKernel \EventListener ;
13
13
14
14
use Symfony \Component \HttpKernel \Event \GetResponseEvent ;
15
- use Symfony \Component \HttpKernel \Event \FilterResponseEvent ;
16
15
use Symfony \Component \HttpKernel \KernelEvents ;
17
16
use Symfony \Component \HttpFoundation \Request ;
18
17
use Symfony \Component \Routing \RequestContextAwareInterface ;
@@ -27,49 +26,41 @@ class LocaleListener implements EventSubscriberInterface
27
26
{
28
27
private $ router ;
29
28
private $ defaultLocale ;
30
- private $ locales = array ();
31
29
32
30
public function __construct ($ defaultLocale = 'en ' , RequestContextAwareInterface $ router = null )
33
31
{
34
32
$ this ->defaultLocale = $ defaultLocale ;
35
33
$ this ->router = $ router ;
36
34
}
37
35
38
- public function onKernelResponse ( FilterResponseEvent $ event )
36
+ public function setRequest ( Request $ request = null )
39
37
{
40
- array_shift ($ this ->locales );
38
+ if (null === $ request ) {
39
+ return ;
40
+ }
41
41
42
- // setting back the locale to the previous value
43
- $ locale = isset ($ this ->locales [0 ]) ? $ this ->locales [0 ] : $ this ->defaultLocale ;
44
- $ request = $ event ->getRequest ();
45
- $ this ->setLocale ($ request , $ locale );
42
+ if ($ locale = $ request ->attributes ->get ('_locale ' )) {
43
+ $ request ->setLocale ($ locale );
44
+ }
45
+
46
+ if (null !== $ this ->router ) {
47
+ $ this ->router ->getContext ()->setParameter ('_locale ' , $ request ->getLocale ());
48
+ }
46
49
}
47
50
48
51
public function onKernelRequest (GetResponseEvent $ event )
49
52
{
50
53
$ request = $ event ->getRequest ();
51
-
52
54
$ request ->setDefaultLocale ($ this ->defaultLocale );
53
- $ this ->setLocale ($ request , $ request ->attributes ->get ('_locale ' , $ this ->defaultLocale ));
54
55
55
- array_unshift ( $ this ->locales , $ request-> getLocale () );
56
+ $ this ->setRequest ( $ request );
56
57
}
57
58
58
59
public static function getSubscribedEvents ()
59
60
{
60
61
return array (
61
62
// must be registered after the Router to have access to the _locale
62
63
KernelEvents::REQUEST => array (array ('onKernelRequest ' , 16 )),
63
- KernelEvents::RESPONSE => 'onKernelResponse ' ,
64
64
);
65
65
}
66
-
67
- private function setLocale (Request $ request , $ locale )
68
- {
69
- $ request ->setLocale ($ locale );
70
-
71
- if (null !== $ this ->router ) {
72
- $ this ->router ->getContext ()->setParameter ('_locale ' , $ request ->getLocale ());
73
- }
74
- }
75
66
}
0 commit comments