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
Auteur

Un petit conseil ?