4
4
5
5
use App \Entity \Language ;
6
6
use App \Entity \Member ;
7
+ use App \Entity \MemberPreference ;
8
+ use App \Entity \Preference ;
9
+ use Doctrine \ORM \EntityManagerInterface ;
7
10
use Sensio \Bundle \FrameworkExtraBundle \Configuration \ParamConverter ;
8
11
use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
9
12
use Symfony \Component \HttpFoundation \RedirectResponse ;
@@ -15,15 +18,32 @@ class LocaleController extends AbstractController
15
18
/**
16
19
* @Route("/rox/in/{locale}", name="language", requirements={"locale" = "[a-z]{2}(-[A-Za-z]{2,})?"})
17
20
* @ParamConverter("language", class="App\Entity\Language", options={"mapping": {"locale": "shortCode"}})
18
- *
19
- * @return RedirectResponse
20
21
*/
21
- public function selectLocaleAction (Request $ request , Language $ language )
22
- {
22
+ public function selectLocaleAction (
23
+ Request $ request ,
24
+ Language $ language ,
25
+ EntityManagerInterface $ entityManager
26
+ ): RedirectResponse {
23
27
/** @var Member $member */
24
28
$ member = $ this ->getUser ();
25
29
if ($ member ) {
26
- $ member ->setPreferredLanguage ($ language );
30
+ $ preference = $ entityManager ->getRepository (Preference::class)->findOneBy ([
31
+ 'codename ' => Preference::LOCALE
32
+ ]);
33
+ $ memberPreference = $ entityManager ->getRepository (MemberPreference::class)->findOneBy ([
34
+ 'preference ' => $ preference ,
35
+ 'member ' => $ member
36
+ ]);
37
+ if (null === $ memberPreference ) {
38
+ $ memberPreference = new MemberPreference ();
39
+ $ memberPreference
40
+ ->setMember ($ member )
41
+ ->setPreference ($ preference )
42
+ ;
43
+ }
44
+ $ memberPreference ->setValue ($ language ->getShortCode ());
45
+ $ entityManager ->persist ($ memberPreference );
46
+ $ entityManager ->flush ();
27
47
}
28
48
29
49
$ redirect = $ request ->headers ->get ('referer ' );
@@ -32,11 +52,14 @@ public function selectLocaleAction(Request $request, Language $language)
32
52
$ redirect = $ this ->redirectToRoute ('homepage ' );
33
53
}
34
54
35
- $ locale = $ request -> attributes -> get ( ' locale ' );
55
+ $ locale = $ language -> getShortCode ( );
36
56
37
- $ this ->get ('session ' )->set ('lang ' , $ locale );
38
- $ this ->get ('session ' )->set ('locale ' , $ locale );
39
- $ this ->get ('session ' )->set ('_locale ' , $ locale );
57
+ $ request ->setLocale ($ locale );
58
+
59
+ $ session = $ request ->getSession ();
60
+ $ session ->set ('lang ' , $ locale );
61
+ $ session ->set ('locale ' , $ locale );
62
+ $ session ->set ('_locale ' , $ locale );
40
63
41
64
return new RedirectResponse ($ redirect );
42
65
}
0 commit comments