getUser(); $teamer = $user->getTeamer(); if (null === $teamer) { $teamer = new Teamer(); $user->setTeamer($teamer); $this->entityManager->persist($teamer); } // Handle upload independently from form submission to avoid issues with failing validation $uploadSession = $this->uploadHandler->getUploadSession(); if (true === $request->isMethod('POST') && 0 < $uploadSession->getCount()) { $this->updatePhoto($user, $uploadSession); } // Validate teamer data to show missing data right away $errors = $this->validator->validate($teamer, null, ['profile_preflight']); $form = $this->createForm(TeamerProfileType::class, $teamer, ['upload_session' => $uploadSession]); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { try { $bpnPassword = $request->getSession()->get('bpn_password'); $this->apiClient->updateProfile($user, $bpnPassword); $this->entityManager->flush(); } catch (ApiClientException $e) { } $this->entityManager->flush(); $this->addFlash('success', 'Deine Daten wurden aktualisiert'); $this->logger->info('Update teamer profile', [ 'user' => $user->getUserIdentifier(), ]); return $this->redirectToRoute('app_teamer_profile_index'); } return $this->render('teamer/profile/index.html.twig', [ 'form' => $form->createView(), 'teamer' => $teamer, 'errors' => $errors, ]); } private function updatePhoto(User $user, UploadSessionDto $uploadSession): void { $teamer = $user->getTeamer(); if (null !== $existingUpload = $teamer->getPhoto()) { $this->entityManager->remove($existingUpload); } $upload = Upload::fromUploadDto($uploadSession->getUploads()->first(), $user, Upload::TYPE_PHOTO); $teamer->setPhoto($upload); $this->entityManager->flush(); $this->uploadHandler->moveUploadSessionFilesFromOrphanage('photo', $uploadSession); $this->uploadHandler->destroyUploadSession(); $this->addFlash('success', 'Dein Profilbild wurde aktualisiert'); $this->logger->info('Update teamer photo', [ 'user' => $user->getUserIdentifier(), ]); } }