Bonjour,

Je suis un débutant dans symfony2, j'esseye de développer une application QCM.

Alors j'ai un probleme dans mon formulaire d'ajout des questions.

dans ma classe Question on a le titre de la question, le type (Ouverte ou fermée), et la réponse (selon le type de la question, si c'est ouverte on aura une input dans le type de champs, si c'est fermée c'est deux boutton redio soit vrais ou faux).

je ne sais pas comment gérer le champs réponse !!!

voici ma classe Question :

<?php
 
namespace ImagePlus\QuestionnaireBundle\Entity;
 
use Doctrine\ORM\Mapping as ORM;
 
/**
 * Question
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="ImagePlus\QuestionnaireBundle\Entity\QuestionRepository")
 */
class Question
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
 
    /**
     * @var string
     *
     * @ORM\Column(name="titre", type="string", length=255)
     */
    private $titre;
 
    /**
     * @var boolean
     *
     * @ORM\Column(name="type", type="boolean")
     */
    private $type;
 
    /**
     * @var string
     *
     * @ORM\Column(name="reponse", type="string", length=255)
     */
    private $reponse;
 
 
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
 
    /**
     * Set titre
     *
     * @param string $titre
     * @return Question
     */
    public function setTitre($titre)
    {
        $this->titre = $titre;
 
        return $this;
    }
 
    /**
     * Get titre
     *
     * @return string
     */
    public function getTitre()
    {
        return $this->titre;
    }
 
    /**
     * Set type
     *
     * @param boolean $type
     * @return Question
     */
    public function setType($type)
    {
        $this->type = $type;
 
        return $this;
    }
 
    /**
     * Get type
     *
     * @return boolean
     */
    public function getType()
    {
        return $this->type;
    }
 
    /**
     * Set reponse
     *
     * @param string $reponse
     * @return Question
     */
    public function setReponse($reponse)
    {
        $this->reponse = $reponse;
 
        return $this;
    }
 
    /**
     * Get reponse
     *
     * @return string
     */
    public function getReponse()
    {
        return $this->reponse;
    }
}

et la classe QuestionType :

<?php
 
namespace ImagePlus\QuestionnaireBundle\Form;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
 
class QuestionType extends AbstractType {
 
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('titre')
                
                ->add('type', 'choice', array(
                    'choices' => array('1' => 'Ouverte', '0' => 'Fermé'),
                    'expanded' => 'true',
                    'required' => true,
                    'attr' => array('onclick' => "met(this,'imageplus');")
                ))
                 ->add('reponse','text')
                                                     
        ;
    }
 
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver) {
        $resolver->setDefaults(array(
            'data_class' => 'ImagePlus\QuestionnaireBundle\Entity\Question'
        ));
    }
 
    /**
     * @return string
     */
    public function getName() {
        return 'imageplus_questionnairebundle_question';
    }
 
}

Je n'ai aucune idée de changer le type du champs 'reponse' selon le type de la question (ouverte ou fermée).
Merci pour votre aide

1 réponse


Tu rajoutes un champ concernant ta réponse.

Exemple :
Si ouverte : >> input >> champ "valeur_reponse_ouverte"
Si fermée : >> radio >> champ "valeur_reponse_fermee"

Après tu mets ces deux champs à null, histoire que quand tu en remplis un, bah le second ne soit pas obligatoire, sinon on va te péter une erreur :)