IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Préselection dans une liste


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Points : 82
    Points
    82
    Par défaut Préselection dans une liste
    Bonjour,

    J'ai un formulaire et j'aimerais le modifier. Du coup, j'aimerais pouvoir voir dans une liste déroulante les différents options que j'avais j'avais choisi auparavent.

    En gros, j'ai ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?php
    namespace Jeu\JeuBundle\Form\Type;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList;
     
     
    class JeuType extends AbstractType {
     
    	protected $joueurs;
     
    	public function __construct($joueurs = null)
    	{
    		$this->joueurs= $joueurs;	
    	}
     
     
    	public function buildForm(FormBuilderInterface $builder, array $options) {
     
    		$builder->add('equipe', 'text', array(
    														'label'=>'Equipe', 
    														'required' => false, 
    														'attr' => array('class' => 'form-control'), 
    														'label_attr' => array('class' => '')
    			->add('joueurs', 'choice', array(
    													        'label'=>'Joueurs',
    														'required' => false,
    														'attr' => array('class' => 'form-control'),
    														'label_attr' =>array('class' => ''),
    														'choices' => $this->joueurs,
    														'multiple'  => true,
    														'expanded' => false
    													));
            }
     
            public function setDefaultOptions(OptionsResolverInterface $resolver) {
     
    		$resolver->setDefaults(array('data_class' => 'Jeu\JeuBundle\Model\JeuModel'));
    	}
     
     
    	public function getName() 
    	{	
    		return 'create_event_form';
    	}
    }
    J'ai ce model:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?php
    namespace Jeu\JeuBundle\Entity\Model;
     
    class JeuModel {
     
    	protected $joueurs;
     
    	public function __construct($joueurs = null) 
    	{
    		$this->joueurs = $joueurs;
    	}
     
    	public function getJoueurs() {
    		return $this->joueurs;
    	}
     
    	public function setJoueurs($joueurs) {
    		$this->joueurs = $joueurs;
    	}
    }
    Le twig associé est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    {{ form_start(form, {'action' : '', 'class' : 'form-horizontal'}) }}
    {{ form_errors(form) }}
     
    <div class="row">
     
        <div class="form-group col-md-8">
         	{{ form_label(form.equipe) }}
        	{{ form_widget(form.equipe) }}
      	</div>
    </div>
     
    <div class="row">
    	<div class="form-group col-md-12">
    		{{ form_label(form.joueurs) }}
    		{{ form_widget(form.joueurs) }}
    	</div>
    </div>
     
    <div class="row">
    	<div class="form-group col-sm-offset-2 col-md-2">
    		<input class="form-control btn btn-primary" type="submit" value="Mettre à jour">
    	</div>
     
    	<div class="col-md-6">
        </div>
    </div>
    {{ form_end(form) }}
    Dans une méthode de mon controller, j'ai la partie GET qui ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ($method == "GET") 
    {
    	$form = $this->createForm(new JeuType($joueurs_list), $JeuModel);
     
    	return $this->render('JeuBundle:Equipe:choix-equipe.html.twig', array("form" => $form->createView()));
    }
    En gros, joueurs_list correspond à tous les joueurs.

    Ce que j'aimerais, c'est que dans mon GET, préselectionner certains joueurs qui seraient spécifier dans une variable.
    Du coup, les joueurs préselectionné seraient en surbrillance et les autres non.

    Comment dois je procéder s'il vous plaît?

    Je vous remercie par avance,

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    A priori, il n'y a rien dessus sur la doc officielle:
    https://symfony.com/fr/doc/current/r...ml#choice-list

    Je continue à chercher en même temps dans la doc mais à priori, c'est peut être impossible.

    Je vous remercie encore

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Points : 82
    Points
    82
    Par défaut
    Re,

    A priori, la présélection sur un formulaire se fait normalement automatiquement via le mot clé selected.

    Cela n'a donc rien avoir avec Symfony 2, je me suis trompé.

    Par contre, les éléments qui doivent être présélectionnés dans mon formulaire ne le sont pas, alors qu'il faudrait qu'ils le soient.

    Peut être, une erreur s'est glissée qui fait que les éléments ne sont pas présélectionnés.

  4. #4
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Salut,

    Je crois que l'attribut 'data' te permet de faire ce que tu souhaites : à savoir déterminer les données qui seront sélectionnée au moment du rendu de ton form.
    Par contre je te suggèrerais de passer ces données en options plutôt qu'au constructeur : ça me semble plus propre : l'objet en soit n'a pas besoin de cette donnée et n'est pas obligée de la setter en attribut, par contre tu peux définit en option une valeur par défaut (un tableau vide) si rien n'est fourni en option, ou rendre ce param obligatoire.

    ++

Discussions similaires

  1. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34
  2. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 21h20
  3. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09
  4. Réponses: 2
    Dernier message: 17/08/2003, 20h07
  5. Réponses: 4
    Dernier message: 24/04/2003, 22h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo