В 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()
];
}
Все работает замечательно, если введенное имя пользователя уникально.
Но если введённое имя пользователя уже было использовано:
- Выводится сообщение об ошибке - как и ожидается.
- В шапке сайта, там, где в шаблоне должно выводится имя текущего авторизованного пользователя (app.user), выводится только что введённое не уникальное имя - это неправильно, как, почему?
И после этого при любом действии произойдет редирект на авторизацию.
Пробовал в форму отправить клон пользователя
$form = $this->createForm(UserProfileType::class, clone $user);
Но в этом случае срабатывает проверка на уникальность и появляется сообщение, что имя текущего пользователя уже занято.
Думаю, что можно обойти проблему с помощью ajax проверки на уникальность перед отправкой формы. Но считаю, что серверная часть должна работать правильно в любом случае.
Прошу квалифицированной помощи!