#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. О, ясное объяснение, большое вам спасибо!!