verfaa
Профессор
- Регистрация
- 29 Янв 2007
- Сообщения
- 417
- Реакции
- 49
- Автор темы
- #1
Использую Symfony 6.3.0
На сайте есть тёмная тема и светлая тема.
Соответственно сущность User имеет свойство darkTheme = true || false
В профиле юзера есть настройки, в которых он может изменить тему на светлую или тёмную, кликнув на radio.
Написал для реализации контроллер
Form:
Handler, который сохраняет изменённую сущность в БД:
И всё работает корректно - настройка меняется. Но проблема визуально состоит в том, что:
Например, у юзера установлена светлая тема и он желает изменить её на тёмную.
Он идёт в настройки, кликает на radio Dark Mode и кликает кнопку Submit. Происходит отправка формы, юзера редиректит на эту же страницу, показывается флеш-сообщение "Settings was successfully updated.". Но тема так и остаётся старой - светлой. А уж если затем перейти на любую другую страницу сайта - появляется уже тёмная тема.
Вопрос: почему так происходит? И как исправить это? (Что бы после сабмита формы сразу появлялась выбранная тема).
На сайте есть тёмная тема и светлая тема.
Соответственно сущность User имеет свойство darkTheme = true || false
В профиле юзера есть настройки, в которых он может изменить тему на светлую или тёмную, кликнув на radio.
Написал для реализации контроллер
Код:
/**
* @Route(path="/settings", name=".settings")
*/
public function settings(Request $request, Handler $handler): Response
{
$command = new Command($this->getUser()->getId(), $this->getUser()->getdark_theme());
$form = $this->createForm(Form::class, $command);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
try {
$handler->handle($command);
$this->addFlash("success", "Settings was successfully updated.");
} catch (\DomainException $e) {
$this->logger->warning($e->getMessage(), ['exception' => $e]);
$this->addFlash("error", $e->getMessage());
}
}
return $this->render("app/dashboard/user/settings.html.twig", [
'form' => $form->createView(),
]);
}
Form:
Код:
class Form extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add("dark_mode", ChoiceType::class, [
'choices' => [
'Dark Mode' => 1,
'Light Mode' => 0,
],
'multiple' => false,
'expanded' => true,
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Command::class,
]);
}
}
Handler, который сохраняет изменённую сущность в БД:
Код:
class Handler
{
private UserRepository $users;
private Flusher $flusher;
public function __construct(UserRepository $users, Flusher $flusher)
{
$this->users = $users;
$this->flusher = $flusher;
}
public function handle(Command $command): void
{
$user = $this->users->get($command->id);
$user->setDarkTheme(
(bool)$command->dark_mode
);
$this->flusher->flush();
}
}
Например, у юзера установлена светлая тема и он желает изменить её на тёмную.
Он идёт в настройки, кликает на radio Dark Mode и кликает кнопку Submit. Происходит отправка формы, юзера редиректит на эту же страницу, показывается флеш-сообщение "Settings was successfully updated.". Но тема так и остаётся старой - светлой. А уж если затем перейти на любую другую страницу сайта - появляется уже тёмная тема.
Вопрос: почему так происходит? И как исправить это? (Что бы после сабмита формы сразу появлялась выбранная тема).