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 :

checkbox pour sélectionner ou pas certaines entités [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut checkbox pour sélectionner ou pas certaines entités
    Bonjour les amis,
    je suis un gros nul en formulaire et j'ai besoin d'aide sur ce coup là.



    voici mon sujet :
    j'ai une liste d'entité fiches à récupérer en base de donnée

    je voudrais créer un formulaire qui associe un checkbox à une fiche, de cette manière :


    1)
    je ne veux pas que le checkbox valid soit enregistré en base.
    dans fiche j'ai ajouté cette attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private $valid;
     
    avec getter et setter qui vont bien
    2)
    je veux pouvoir initialiser les valid dans le controleur suivant une logique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     $fiches= $em-> ....          // je récupère les fiches          
    foreach (fiches as fiche) {   
            $fiche->setValid(true);    
       ou
            $fiche->setValid(false);
     }
     
    $form = $this->createForm(new FicheType(), $fiches);

    et obtenir ça :
    [ ] fiche 1
    [X] fiche 2
    [ ] fiche 3
    ...


    comment m'y prendre ?

  2. #2
    Membre Expert 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 : 37
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Yo, y a eu une grosse prise de conscience en l'espace d'une heure ? T'es passé de "dieu de Symfony" à "gros nul en formulaire".

    Le problème quand tu fais un champs (même non mappé) c'est que ton entité possède une dépendance vers un formulaire précis, et ça c'est mal.
    Du coup je pense que tu devrais dégager ce champs $valid de ton entité.

    Voilà comment j'aborderais la chose :

    Un formulaire qui prend une checkbox + une entité c'est assez banal et potentiellement récurent. Du coup tu peux en faire un formtype générique à part, on aurait dit que tu l'appelles CheckboxAndEntityType.
    En passant par l'OptionResolver, tu peux rajouter des options obligatoires pour la configuration de ce type d'élément.

    Ensuite, tu vas faire un formModel : c'est à dire une classe non mappée qui ne sera utilisée que pour ce form. La aussi tu peux faire un truc générique ou tu ne spécifies pas quel type d'entité est attendu. L'idée c'est d'avoir une classe correspondant à ton formulaire : donc les deux attributs sont $valid, et $entity.

    Pour finir, tu fais une collection de formulaires qui ne possède dans leur builder qu'un élément de form : qui sera de type 'checkbox_and_entity'.

    En amont dans ton contrôleur au lieu de setter un attribut de l'entité, tu instancies un nouveau formModel auquel tu set ton entité et le booléen.
    Dans le handleRequest tu récupères un objet de type FormModel. Tu accèdes à ton entité en faisant $formModel->getEntity() et à la valeur du valid en faisant $formModel->isValid().

    J'espère que j'ai été assez clair dans mes explications.
    ++

  3. #3
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    tin ouééé du coup je me sens comme un dieu déchu, descendu de son piédestal ... snif
    mais un jour je le serai..... un jour .....


    Je te remercie pour ces informations, j'ai compris tes explications que je vais mettre en oeuvre.
    et vous tiens au courant

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,

    En quoi le champ entity avec option "multiple" ne répondrait pas à ton besoin?

    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
    
    $touteLesFiches= $em->//récup toutes les fiches
    
    $fichesPreselectionnees=array();//faire un traitement si besoin pour choisir  les fiches devant être preselectionnée
    
    //un formulaire qui n'est pas directement mappé à une entité
    //c'est un simple tableau dont l'index "fichesSelectionnees" est un tableau d'entité fiches
    
    $formData=array('fichesSelectionnees'=>$fichesPreselectionnees);
    
    $form = $this->createFormBuilder($formData)
                       ->add('fichesSelectionnees','entity',array(
                                'class'=>'MyBundle:Fiche',
                                'multiple'=>true,
                                'choices'=>$touteLesFiches,
                                'property'=>'nom'//si la classe Fiche n'a pas de méthode __toString, ou si on veut utiler une méthode particulière pour le label
                        ))
                       ->getForm();
    
    $form->handleRequest();
    
    if($form->isSubmited() && $form->isValid()){
       
       $fichesSelectionnee=$form->get('fichesSelectionnees')->getData();
       //do something avec la selection
    
    }

  5. #5
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    j'etudie vos 2 techniques :

    arno99,

    je ne vois pas comment je set true ou false ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    $fichesPreselectionnees=array();
     
    foreach( $touteLesFiches as $fiche ) {
      $fichesPreselectionnees[]  = $fiche;  ??????
     ?????
     
    comment je set à FALSE ou TRUE 
     
    }

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    je ne vois pas comment je set true ou false ici :
    Si la finalité est juste de récupérer des entités Fiches pour leur appliquer un traitement, il n'y a pas besoin d'attribut "valid".
    la checkbox n'est pas mappé à cet attribut "valid", mais au fait que la fiche soit ou pas dans la sélection.
    Le type de formulaire SF "entity" hérite du type "choice":
    C'est assez parlant, il s'agit d'un type de formulaire destiné à faire un/des choix, et qui tu renvois la sélection de l'utilisateur.

    Pour que des fiches soient présélectionnés au premier affichage du formulaire, il faut juste qu'elles soient dans le tableau "$fichesPreselectionnees".
    La logique selon laquelle elle doivent être préselectionnées t'appartiens, (et peut être n'en as tu pas besoin en fait).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sous requête pour sélectionner certaines colonnes
    Par Vince57 dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/08/2010, 11h31
  2. [DisplayTag] Title pour display:column contenant checkbox pour tout sélectionner
    Par Slyders dans le forum Taglibs
    Réponses: 1
    Dernier message: 06/05/2010, 15h21
  3. [XL-2007] Checkbox pour sélectionner des plages
    Par Aurel.89 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/04/2010, 13h31
  4. [XL-2007] CheckBox ou Listbox pour sélectionner des critères et les afficher dans une autre feuille
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 19/08/2009, 15h19
  5. Réponses: 10
    Dernier message: 11/11/2007, 15h18

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