Bonjour, je souhaite mettre en place un formulaire en trois étapes pour la création d'articles.

Il y aura trois entités : Catégorie, Sous-catégorie et Article. Le processus consistera à créer un article en trois étapes :

Première étape :
Un menu déroulant avec les catégories existantes.
Un champ de saisie pour créer une nouvelle catégorie.
Instructions : Sélectionnez une catégorie existante ou saisissez le titre d'une nouvelle catégorie.
Deuxième étape :
Un menu déroulant avec les sous-catégories existantes associées à la catégorie sélectionnée dans la première étape.
Un champ de saisie pour créer une nouvelle sous-catégorie.
Instructions : Sélectionnez une sous-catégorie existante ou saisissez le titre d'une nouvelle sous-catégorie.
Dernière étape :
Un champ pour le titre de l'article.
Un espace de contenu de type zone de texte (textarea), déjà fonctionnel à 100%.
Le but est de choisir une catégorie, puis une sous-catégorie liée à cette catégorie, et enfin de lier l'article à la sous-catégorie sélectionnée.

En gros, en base de données, je souhaite avoir une structure où chaque article est associé à une sous-catégorie, qui elle-même est associée à une catégorie.

Comment puis-je mettre cela en place, s'il vous plaît ? J'ai déjà créé deux autres entités, Catégorie et Sous-catégorie, et je dois mettre en place le formulaire pour chacune.

Est-ce que je peux gérer cela avec un seul contrôleur ? J'ai déjà mis en place les opérations CRUD (Create, Read, Update, Delete) pour mes articles.

Merci d'avance !

" <?php

namespace App\Controller;

use App\Entity\Article;
use App\Form\ArticleType;
use App\Entity\Categorie;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\Persistence\ManagerRegistry;

class ArticleController extends AbstractController
{

#[Route("/article/new", name: "article_new", methods: ["GET", "POST"])]
public function new(Request $request, ManagerRegistry $doctrine): Response
{
    $article = new Article;
    $formArticle = $this->createForm(ArticleType::class, $article);

    $formArticle->handleRequest($request);

    if ($formArticle->isSubmitted() && $formArticle->isValid()) {

        // dd($request);
        $entityManager = $doctrine->getManager();
        $entityManager->persist($article);
        $entityManager->flush();

        return $this->redirectToRoute('article_list');
    }

    return $this->render('article/form-new.html.twig', [
        'formArticle' => $formArticle->createView(),
    ]);
}

#[Route("/article/edit/{id}", name: "article_edit", methods: ["GET", "POST"])]
public function edit($id, ManagerRegistry $doctrine, Request $request): Response
{
    $article = $doctrine->getRepository(Article::class)->find($id);

    $formArticle = $this->createForm(ArticleType::class, $article);

    $formArticle->handleRequest($request);

    if ($formArticle->isSubmitted() && $formArticle->isValid()) {
        $entityManager = $doctrine->getManager();
        $entityManager->flush();

        return $this->redirectToRoute('article_list');
    }

    return $this->render('article/form-edit.html.twig', [
        'formArticle' => $formArticle->createView(),

    ]);
}

#[Route("/article/delete/{id}", name: "article_delete")]
public function delete($id, ManagerRegistry $doctrine): Response
{
    $entityManager = $doctrine->getManager();
    $article = $doctrine->getRepository(Article::class)->find($id);

    if (!$article) {
        throw $this->createNotFoundException('Article not found');
    }

    $entityManager->remove($article);
    $entityManager->flush();

    return $this->redirectToRoute('article_list');
}

#[Route("/article/list", name: "article_list")]
public function readAll(ManagerRegistry $doctrine)
{   
    $articles = $doctrine->getRepository(Article::class)->findAll();

    return $this->render("article/list.html.twig", [
        "articles" => $articles
    ]);
}

#[Route("/article/{id}", name: "article_detail")]
public function detail($id, ManagerRegistry $doctrine): Response
{
    $article = $doctrine->getRepository(Article::class)->find($id);

    if (!$article) {
        throw $this->createNotFoundException('Article not found');
    }

    return $this->render('article/item.html.twig', [
        'article' => $article
    ]);
}

#[Route("/articles", name: "articles")]
public function articles(ManagerRegistry $doctrine): Response
{
    $articles = $doctrine->getRepository(Article::class)->findAll();

    return $this->render('article/articles.html.twig', [
        'articles' => $articles
    ]);
}

} "

Aucune réponse