Bonjour,
Il y a plusieurs approches possibles. Voici une première approche:
- Utiliser des cessions pour stocker de manière temporaire les données entres les étapes du formulaire.
[Route('/new', name: 'app_videos_new', methods: ['GET', 'POST'])]
public function new(Request $request, EntityManagerInterface $entityManager, SessionInterface $session): Response
{
$video = new Videos();
$form = $this->createForm(VideoIDType::class, $video);
$form2 = $this->createForm(VideoTagsType::class, $video);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$url = $form->get('video_id')->getData();
$videoID = $this->getYoutubeIdFromUrl($url);
if (isset($videoID)) {
$videoInfos = $this->getYoutubeInfos($videoID);
$this->setYoutubeInfos($video, $videoInfos);
// Stockez les informations dans la session
$session->set('videoInfos', $videoInfos);
$entityManager->persist($video);
$entityManager->flush();
return $this->redirectToRoute('app_videos_new', [], Response::HTTP_SEE_OTHER);
} else {
// Gérez le cas où l'ID de la vidéo n'est pas valide
}
}
$form2->handleRequest($request);
if ($form2->isSubmitted() && $form2->isValid()) {
// Récupérez les informations stockées dans la session
$videoInfos = $session->get('videoInfos');
$datas = $form2->get('tags')->getData();
for ($i = 0; $i < count($datas); $i++) {
$video->addTag($datas[$i]);
}
$entityManager->flush();
// Nettoyez les informations de la session
$session->remove('videoInfos');
return $this->redirectToRoute('app_videos_index', [], Response::HTTP_SEE_OTHER);
}
return $this->render('videos/new.html.twig', [
'video' => $video,
'form' => $form->createView(),
'form2' => $form2->createView(),
]);
}
Assurez-vous d'ajouter use Symfony\Component\HttpFoundation\Session\SessionInterface; au début de votre fichier pour utiliser la session.