Symfony 5 — обновление сеанса пользователя без повторного ведения журнала

#symfony

#symfony

Вопрос:

Есть ли какой-либо способ обновить User сеанс? У меня есть контроллер с формой изменения локали, после его отправки я хочу обновить этот сеанс с помощью новой установленной локали. Я уже пытался использовать сеанс migrate() , но безуспешно.

Есть идеи?

Часть моего контроллера

 /**
    * @route("/changeLocale", name="changeLocale")
    */
    public function changeLocale(Request $request, Session $session)
    {
        $form = $this->createFormBuilder(null)
            ->add('locale', ChoiceType::class, [
                'choices' => [
                    'Français' => 'fr_FR',
                    'Czech' => 'cs_CZ',
                    'English(US)' => 'en_US'
                ]
            ])
            ->add('save', SubmitType::class)
            ->getForm()
        ;

        $form->handleRequest($request);

        if ($form->isSubmitted()) {
            $em = $this->getDoctrine()->getManager();
            $locale = $form->getData()['locale'];
            $user = $this->getUser();
            $user->setLocale($locale);
            $em->persist($user);
            $em->flush();
            $session->migrate();
        }

        return $this->render('admin/dashboard/locale.html.twig', [
            'form' => $form->createView()
        ]);
    }
 

Ответ №1:

Это неправильный путь. При аутентификации вы сохраняете языковой стандарт вашего объекта user в сеансе. Верно? Если у вас есть LocaleSubscriber, который сохраняет языковой стандарт в вашем сеансе, воссоздание вашего сеанса не сработает. Языковой стандарт сохраняется в сеансе только при аутентификации. Если вы измените локаль, вам просто нужно обновить сеанс.

 
        if ($form->isSubmitted()) {
            $em = $this->getDoctrine()->getManager();
            $locale = $form->getData()['locale'];
            $user = $this->getUser();
            $user->setLocale($locale);
            $em->persist($user);
            $em->flush();
            // Update the session
            $request->getSession()->set('_locale', $locale);
        }
 

Комментарии:

1. О, ясное объяснение, большое вам спасибо!!