@avkluchko

При редактировании имени пользователя, если новое имя занято, выводится сообщение об ошибке, и... и меняется имя текущего пользователя в шапке сайта?

В symfony3 делаю профиль пользователя, авторизация происходит по email, username - просто уникальное имя пользователя.

public function profileAction(Request $request)
{
        $em = $this->getDoctrine()->getManager();
        $user = $em->getRepository('UserBundle:User')->findOneByToken($this->getUser()->getToken());

        $form = $this->createForm(UserProfileType::class, $user);
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em->flush();
            $this->addFlash('success', self::MSG_SUCCESS_EDIT);
        }

        return [
            'form' => $form->createView()
        ];
}

Все работает замечательно, если введенное имя пользователя уникально.

Но если введённое имя пользователя уже было использовано:
  1. Выводится сообщение об ошибке - как и ожидается.
  2. В шапке сайта, там, где в шаблоне должно выводится имя текущего авторизованного пользователя (app.user), выводится только что введённое не уникальное имя - это неправильно, как, почему?

И после этого при любом действии произойдет редирект на авторизацию.

Пробовал в форму отправить клон пользователя
$form = $this->createForm(UserProfileType::class, clone $user);

Но в этом случае срабатывает проверка на уникальность и появляется сообщение, что имя текущего пользователя уже занято.

Думаю, что можно обойти проблему с помощью ajax проверки на уникальность перед отправкой формы. Но считаю, что серверная часть должна работать правильно в любом случае.

Прошу квалифицированной помощи!
  • Вопрос задан
  • 234 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы