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