Comment organiser mon CRUD Form ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment organiser mon CRUD Form ?

Re: Comment organiser mon CRUD Form ?

par semsem » 21 févr. 2024, 20:45

J'ai réussi ! =D :priere: :priere: ENFIN !!
Merci beaucoup @Saïen !!!
Par contre, y'a t-il moyen de le mettre dans un EasyAdmin ? Afin de profiter de l'interface, j'ai l'impression que c'est galère de faire une migration vers EasyAdmin

Re: Comment organiser mon CRUD Form ?

par Saian » 21 févr. 2024, 18:02

Salut, on dirait qu'il manque des choses.

Pour commencer la step1 on doit pouvoir choisir une catégorie ou en créer une. La CategoryType s'il est basique il sert a créer une catégorie pas à en choisir une, alors où est le choix ?

Ensuite lors du isSubmitted isValid, il y a une redirection vers step2 avec category en paramètre mais le paramètre n'existe pas sur la route step2. De plus la catégorie n'est pas sauvegardé (pas de persist + flush).

A peu près les mêmes remarques sur la step2. Différence création/sélection de sous catégorie ? Enregistrement (presist + flush) si nouvelle ? Paramètres non pris en compte dans la route (étonné que ça plante pas d'ailleurs).

Mais je viens de percuter que tu veux tout enregistrer à la fin dans step 3. Y a de l'idée. Je pense qu'il te manque les paramètres categorie et souscategorie dans les routes.

Et du coup dans la step3, il faut récupérer categorie et souscategorie si existantes ou les créer AVANT le create form article (la récupération peut être délicate en se basant sur les titres si y a des doublons de sous catégories dans différentes catégories par exemple EDIT vu que tu as categorie et souscategorie en fait c'est jouable à l'aise).
Ensuite tu pourras ajouter la sous catégorie à l'article avant de créer le formulaire. Dans le ArticleType tu peux mettre la colonne hidden.

Bref en théorie t'es pas très loin. Corrige les routes et la step3.

PS : en relisant vite fait, vu que les redirectToRoute semblent ne pas planter, les paramètres categorie et souscategorie sont-ils bien présent dans l'url genre ?categorie=name&souscategorie=name ? parce que si c'est le cas, même sans tenir compte de mes réflexions, ça pourrait être fonctionnel la... sauf que lors du submit du formulaire article, les paramètres get (categorie et souscategorie) ne doivent plus être présents dans l'url. Du coup, aller sur l'idée de les enregistrer dès que tu arrive sur la step3 avant le createForm ArticleType OU se débrouiller pour les avoir dans l'url du formulaire article (modifier le paramètre action de la balise form dans le template).

Ton système est pas mal en vrai, assez simple, il doit vraiment pas manquer grand chose pour que ça fonctionne !

Re: Comment organiser mon CRUD Form ?

par Spols » 21 févr. 2024, 11:01

D'où viens ton soucis ?

ta requète sql ? autre ...

Re: Comment organiser mon CRUD Form ?

par semsem » 20 févr. 2024, 11:36

@Spols Merci de ta réponse alors j'ai pu faire un formulaire en 3 steps malheureusement mais il fonctionne pas quand je creer, il s'ajoute en BDD

Par contre je n'arrive pas à récupérer la liste de mes sous catégories quand je sélectionne une catégorie en step 1
en gros je souhaite retrouver dans mon select les sous catégories liée à ma catégories sélectionner...

Catégorie A
Sous Cat A1
Sous Cat A2
Catégorie B

Je souhaite retrouver Sous Cat A1 et A2 si je sélectionne précédemment le Catégorie A dans mon Step 1


Mon Controlleur

https://sharemycode.io/c/3417ab7

Mes entités

https://sharemycode.io/c/23544ac


Merci d'avance

Re: Comment organiser mon CRUD Form ?

par Spols » 19 févr. 2024, 22:57

Salut

Cherche un tuto sur des listes liées et ajoute cela a ton formulaire sans faire 3 etapes. Cela te complique la vie inutilement.

Comment organiser mon CRUD Form ?

par semsem » 16 févr. 2024, 22:48

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
        ]);
    }




}