Partage
  • Partager sur Facebook
  • Partager sur Twitter

système CRUD avec php/symfony4

    20 juillet 2019 à 21:51:27

    Bonjour, en cliquant sur le bouton modifier, je modifie par exemple le plat sélectionner qui m’amène sur un formulaire avec les données du plats sélectionner ça sa marche sauf que sa me prend que les entrées même si je veut modifier par exemple un dessert je sais pourquoi??.J'ai quatre tables avec entree, plats,poisson,desserts (id, title, description).

    MainController:

        /**
         * @Route("/modifier-menu/{id}/", name="editMenu", requirements={"id" : "[1-9][0-9]{0,10}"})
         * Page modification menu
         */
        public function editMenu($id){
    
            $entreeRepo = $this->getDoctrine()->getRepository(Entree::class);
            $entree = $entreeRepo->findOneById($id);
            $platsRepo = $this->getDoctrine()->getRepository(Plats::class);
            $plat = $platsRepo->findOneById($id);
            $poissonRepo = $this->getDoctrine()->getRepository(Poisson::class);
            $poisson = $poissonRepo->findOneById($id);
            $dessertsRepo = $this->getDoctrine()->getRepository(Desserts::class);
            $dessert = $dessertsRepo->findOneById($id);
            
            
            
            
            if($entree){
                return $this->render('editMenu.html.twig', ['menu' => $entree]);
    
            }
            elseif($plat){
                return $this->render('editMenu.html.twig', ['menu' => $plat]);
    
            }
            elseif($poisson){
                return $this->render('editMenu.html.twig', ['menu' => $poisson]);
    
            }
            elseif($dessert){
                return $this->render('editMenu.html.twig', ['menu' => $desserts]);
    
            }
            return $this->render('editMenu.html.twig');
        }

    Vue twig de la page editMenu.html.twig :

    {% extends "base.html.twig" %}
    
    {% block title %}Modifier menu{% endblock %}
    {% block stylesheets %}{% endblock %}
    {% block body %}
    <br><br><br><br><br>
    <h1 class="text-center">Modifier menu</h1>
    <div class="container">
            <form method="POST" class="col-12 col-md-6 offset-md-3 ">
                <div class="form-group">
                    <label for="title">Titre: </label>
                    <input type="text" class="form-control" id="title" name="title" placeholder="{{ menu.title }}">
                </div>
                <div class="form-group">
                    <label for="description">Description: </label>
                    <textarea class="form-control" id="description" name="description" placeholder="description" rows="3">{{ menu.description }}</textarea>
                </div>
                <br>
                <button type="submit" class="btn btn-danger" style="background:#A0001E;">Modifier</button>
            </form>
    </div>
    {% endblock %}




    • Partager sur Facebook
    • Partager sur Twitter
      20 juillet 2019 à 22:47:09

      Bonsoir.

      Ton code est incorrect, car étant donné que je suppose que id correspond à une colonne de table en auto-incrément, tu peux facilement avoir la même valeur dans les 4 tables concernées.

      En plus de ça, c'est normal que tu tombes toujours sur la table concernant les entrées pour la raison que j'ai cité ci-dessus et parce que c'est la première condition vérifié.

      Autre chose qui ne va pas, tu te répète 4 fois pour rien avec tes return $this->render dans les conditions.

      Puisque les quatre tables ont les mêmes colonnes, autant n'en faire qu'une seule et ajouter une colonne qui permettra de différencier le type qui pourrais par exemple être une jointure avec une autre table, exemple :

      • Table plats : id, title, description, plat_type_id
      • Table plats_types : id, title (entrée ou principal ou poisson ou dessert)

      -
      Edité par Lartak 20 juillet 2019 à 22:48:44

      • Partager sur Facebook
      • Partager sur Twitter

      Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

        23 juillet 2019 à 15:55:00

        J'ai modifier les tables et maintenant j'ai un problème pour l'ajout 

        Dans MainController:

        /**
             * @Route("/ajout-menu/", name="addMenu")
             * Page d'ajout de menu
             */
            public function addMenu(Request $request){
               
                $session = $this->get('session');
                if(!$session->has('account')){
                    return $this->redirectToRoute('connection');
                }
        
                 
                 if($request->isMethod('POST')){
        
                   
                    $platType = $request->request->get('type');
                    $title = $request->request->get('title');
                    $description = str_replace(array("\n", "\r"), '', nl2br($request->request->get('description')));
        
                   
                    if(empty($platType)){
                        $errors['invalidType'] = true;
                    }
        
                    if(!preg_match('#^.{2,255}$#', $title)){
                        $errors['invalidTitle'] = true;
                    }
        
                    if(!preg_match('#^.{2,8000}$#', $description)){
                        $errors['invalidDescription'] = true;
                    }
        
                    
                    if(!isset($errors)){
        
                       
                        $plat = new Plats();
                        $plat
                            ->setTitle($title)      
                            ->setDescription($description)
                            ->setPlatType($platType)
                        ;
        
                        
                        $em = $this->getDoctrine()->getManager();
                        $plat = $em->merge($plat);    
                        $em->flush();
                        
        
                       
                        return $this->render('addMenu.html.twig', [ 'success' => true, 'plat' => $plat, 'platType' => $platType]);
                        }
        
                        
                    }
                   
                    if(isset($errors)){
                        return $this->render('addMenu.html.twig', ['errors' => $errors]);
                    }
                
               
        	$platsRepo = $this->getDoctrine()->getRepository(Plats::class);
                $plat = $platsRepo->findAll();
                
                $platsTypesRepo = $this->getDoctrine()->getRepository(PlatsTypes::class);
                $platsTypes = $platsTypesRepo->findAll();
                return $this->render('addMenu.html.twig', ['platsTypes' => $platsTypes]);
            }

        Vue Ajout Menu:

        {% extends "base.html.twig" %}
        
        {% block title %}Ajout menu{% endblock %}
        {% block stylesheets %}{% endblock %}
        {% block body %}
        <br><br><br><br><br>
        <h1 class="text-center">Ajout menu</h1>
        <div class="container">
            {% if success is defined %}
                        <p class="alert alert-success col-12 text-center">Menu ajouté !</p>
            {% endif %}
                <form method="POST" class="col-12 col-md-6 offset-md-3 ">
                    <div class="form-group">
                    <label class="my-1 mr-2" for="type">Choisissez le type:</label>
                    {% for platType in platsTypes%}
                        <select class="custom-select my-1 mr-sm-2" id="type" name="type">
                            <option selected value="{{ platsTypes.id }}" >{{ platsTypes.title }}</option>
                        </select>
                        {% endfor %}
                        {% if errors.invalidType is defined %}
                        <p class="text-danger">Séléctionner une option</p>
                        {% endif %}
                    </div>
                    <div class="form-group">
                        <label for="title">Titre: </label>
                        <input type="text" class="form-control" id="title" name="title" placeholder="titre">
                        {% if errors.invalidTitle is defined %}
                        <p class="text-danger">Titre invalide</p>
                        {% endif %}
                    </div>
                    <div class="form-group">
                        <label for="description">Description: </label>
                        <textarea class="form-control" id="description" name="description" placeholder="description" rows="3"></textarea>
                        {% if errors.invalidDescription is defined %}
                        <p class="text-danger">Description invalide</p>
                        {% endif %}
                    </div>
                    <br>
                    <button type="submit" class="btn btn-danger" style="background:#A0001E;">Ajouter</button>
                </form>
        </div>
        {% endblock %}

        l'erreur que sa fait

        • Partager sur Facebook
        • Partager sur Twitter
          23 juillet 2019 à 16:16:06

          Soit le nom de la classe est mal défini ou alors son fichier.

          -
          Edité par Lartak 23 juillet 2019 à 16:16:59

          • Partager sur Facebook
          • Partager sur Twitter

          Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

          système CRUD avec php/symfony4

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown