Prédéfinir les valeurs d'un formulaire

Par nans, il y a 9 ans


Bonjour à tous,

Sur mon site, j'affiche un formulaire de choix de groupes (en sachant que le nombre de groupe est une valeur dynamique).
Je souhaiterais qu'en réponse à ce formulaire, il n'y ait comme possibilités, qu'un numéro qui corresponde à un groupe.
Exemple si il y a 3 groupes :
3 champs seraient affichés, le champ 1 serait un choix entre 1, 2 et 3, le champ 2 avec les deux numéros restants et le champ 3 avec le dernier numéro.

Voici mon controlleur qui génère le formulaire

public function showAction(Request $request, $projet_id){ $em = $this->getDoctrine()->getManager(); $projet = $em->getRepository("\structureBundle\Entity\Projet")->findOneById($projet_id); $nbchoix=$projet->getInit()->getNbgpe(); for($i=0;$i<$nbchoix;$i++){ $data["choixs"][] = new Choix();} $form = $this->createForm(RelaiChoixType::class, $data); $form->handleRequest($request); if ($form->isValid()) { $user = $this->recupeAuteurReponse($projet->getEntreprise()); $reponse = $this->verifNoReponse($user, $projet->getInit()->getFormulaire()); if($user && !$reponse){ $choixs = $form->getData()["choixs"]; $reponse = new Reponse(); $reponse->setUser($user)->setFormulaire($projet->getInit()->getFormulaire()); $i=1; foreach($choixs as $choix){ $choixgpe = $choix->getChoixgpe(); $choix ->setNumero($i)->setUser($user)->setReponse($reponse)->setChoixgpe($choixgpe - 1); $i=$i+1; $em->persist($choix); $reponse->addChoix($choix);} $em->persist($reponse); $em->flush(); }else{$request->getSession()->getFlashBag()->add('error', 'Vous avez déjà répondu au formulaire !'); return $this->render('UserBundle:Formulaire:showFormulaire.html.twig', array( 'projet' => $projet, 'form' => $form->createView()));} return $this->render('UserBundle:Reponse:votreReponse.html.twig', array( 'user' => $user, 'reponse' => $reponse, 'choixs' => $choixs)); } return $this->render('UserBundle:Formulaire:showFormulaire.html.twig', array( 'projet' => $projet, 'form' => $form->createView())); }

Voici les deux FormType utilisés par mon controlleur :

<?php namespace UserBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\Core\Type\IntegerType; class ChoixType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('choixgpe', IntegerType::class, array('label' => 'groupe numéro : ')) ; } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'UserBundle\Entity\Choix' )); } }

et

<?php namespace UserBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use UserBundle\Form\ChoixType; use Symfony\Component\Form\Extension\Core\Type\CollectionType; //use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; //use Symfony\Component\Form\Extension\Core\Type\EmailType; //use Symfony\Component\Form\Extension\Core\Type\DateType; class RelaiChoixType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add("choixs", CollectionType::class, array( 'entry_type' => ChoixType::class, 'allow_add' => true, 'allow_delete' => true )); } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => null )); } }

Actuellement, il est possible de remplir mon formulaire avec n'importe quel numéro, entier, positif. Ce qui me pose parfois des problèmes dans le traitements.

Auriez-vous des conseils à me donner pour trouver une solution ?

Je vous remercie très sincèrement pour le temps que vous accorderez à la lecture de ce post et pour l'aide que vous êtes en mesure de m'apporter.

PS : je m'excuse pour le franglais de mon code ainsi que pour la non optimisation (je n'ai strictement aucune formation en info, je suis autodidacte, depuis quelques mois...)

Nans

1 réponse

nans, il y a 9 ans

Un petit conseil ?