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 :

Formulaire avec champ entity [2.x]


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Points : 27
    Points
    27
    Par défaut Formulaire avec champ entity
    J'ai un formulaire avec un champ entity qui me retourne tous ce qui se trouve dans la base de donnée.

    J'ai un entity enseignant, et un enfant.
    dans mon formulaire je peux laisser des commentaires à mes élèves.
    Nous sommes plusieurs enseignant à utiliser cette base de donné. J'aimerais pourvoir afficher dans mon champ enfant seulement les enfants de ma classe et non ceux de mes collègues.

    merci

  2. #2
    Membre expert
    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
    Points : 3 004
    Points
    3 004
    Par défaut
    yooooooooooooooo man rastafariiiiiiiiiiiiiiiiiiiiiiiiiiiiiii,




    pour cela man, il faut faire ainsi :


    exemple avec un user :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use Doctrine\ORM\EntityRepository;
    // ...
     
    $builder->add('users', 'entity', array(
        'class' => 'AcmeHelloBundle:User',
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('u')
                ->orderBy('u.username', 'ASC');
        },
    ));

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Points : 27
    Points
    27
    Par défaut
    Salut et merci pour ta réponse.

    Je crois par contre que je n'ai pas été très clair.

    Mon entity commentaire a une relation avec enfant mais pas avec enseignant.
    de l'autre côté, mon entity enfant a une relation avec enseignant.

    Ton code me liste les élèves en ordre ce qui est très bien mais je veux qu'il ne liste que ceux de l'enseignant connecté.

    donc il faudrait que enseignant_id de mon entity enfant soit = à app.user.id


    Je ne sais pas si c'est plus clair...

  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
    Mmh, je crois que ce que dukoid essayait de te montrer c'est l'option query_builder, dans laquelle tu peux mettre le qb de ton choix.
    Il t'en a fait un bateau, à toi de rajouter la jointure et la condition qui va bien pour que ça colle à ton besoin.

    Une petite chose pour éviter toute déconvenue : oublie le concept de clé étrangère. En POO ce sont des objets et des collections.
    Donc enfant.enseignant_id => tu oublies DIRECT ... DIRECT !!!

    Donc tu veux récupérer des enfants correspondant à un professeur, très bien, une petite jointure vers prof et l'affaire est réglée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    return $er->createQueryBuilder('enfant')
        ->join('enfant.professeur', 'prof', 'WITH', 'prof.id = :prof')
        ->setParameter('prof', $profId);
    Voilà tu as une requête qui te retourne les élèves d'un prof.
    Comme je sais pas si tes enfants sont en primaire ou au lycée je sais pas non plus s'ils ont un prof ou plusieurs, là je suis parti du principe qu'ils en avait qu'un mais à une lettre près la requête est la même.

    Je te laisse regarder comment récupérer ton $profId.
    Mon avis c'est que passer une option 'user' à ton FormType me parait relativement simple (en le récupérant depuis le contrôleur par exemple si c'est là que tu instancies ton formType), plutôt qu'essayer d'atteindre le user connecté depuis un service security_context qui n'aurait pas sa place injecté dans un formType.

    A+

  5. #5
    Membre expert
    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
    Points : 3 004
    Points
    3 004
    Par défaut
    oooooh mon batoooOOOOOH OOOOOOOOOOOOOOOOOOOOOOOH OOOOOOOOOH

    désolé !

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Nico_F Voir le message
    Je te laisse regarder comment récupérer ton $profId.
    C'est justement ca que je ne vois pas comment faire....

  7. #7
    Membre expert
    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
    Points : 3 004
    Points
    3 004
    Par défaut
    tu peux par exemple passer le profID par le constructeur de ton formType.
    ce n'est pas très élégant mais c'est efficace

  8. #8
    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
    Ou sinon tu as dans la méthode buildForm() un deuxième paramètre qui est un array $options. Tu peux passer ton user dans ce tableau.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Points : 27
    Points
    27
    Par défaut
    Ou puis-je trouver des infos sur les options et ce tableau. Je suis pas certain de comprendre. Svp voudrais- tum'éclairer..

  10. #10
    Membre expert
    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
    Points : 3 004
    Points
    3 004
    Par défaut
    un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $form = $this->buildForm(new MyCustomType(), null, array(
        'my_option' => true
    ));

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class MyCustomType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            if($options['my_option']){
                //do something
            } else {
                //do another thing
            }
            ...
        }

  11. #11
    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
    euh dukoid ... y a un souci là ? 2 arguments ? 3 arguments ?

  12. #12
    Membre expert
    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
    Points : 3 004
    Points
    3 004
    Par défaut
    oups, il faut virer le NULL bien sur !

  13. #13
    Nouveau membre du Club
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Points : 27
    Points
    27
    Par défaut Merci de m'aider
    Alors j'ai regarder vos différentes solutions et j'ai aussi continuer de fouiller sur le web et voici mon code(qui ne fonctionne toujours pas mais j'avance) je crois.

    Petit rappel:
    J'ai un entity enfant, avec une relation manytoone avec prof. Dans mon entity commentaire la relation est manytomany avec enfant.

    Ce que je veux c'est que lorsque je remplie le formulaire commentaire, je puisse choisir que les enfants de ma classe et non pas ceux de mes collègues.

    Donc dans mon controller je vais chercher l'id du user actuellement connecter comme cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     $enseignants = $this->getUser();
            $enseignant =$enseignants->getId();
     
            $form = $this->createForm(new CommentaireType(), $entity, array(
                'action' => $this->generateUrl('commentaire_create'),
                'method' => 'POST','data'=>$enseignant
            ));
    Je transmet la variable en le passant dans data.

    par la suite dans mon CommentaireType je récupère mon id de la façon suivante.

    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
     
     
            $id = $options['data'];
     
            $builder
                ->add('date','date',array('label'=> false))
                ->add('enfants','entity',array(
                        'class'=>'MonBundle:Enfant',
                        'query_builder' => function(EntityRepository $er) use ($Id) {
                                return $er->createQueryBuilder('u')
                                    ->orderBy('u.username', 'ASC')
                                    ->where("u.enseignant = :id")
                                    ->setParameter('id' , $Id)
                                    ;
                            },
                    ))
    Si je fais un var_dump($id), il me donne bien l'utilisateur connecté. mais il me donne aussi une erreur la voici..

    The form's view data is expected to be an instance of class Tic\GestionBundle\Entity\Commentaire, but is a(n) string. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms a(n) string to an instance of Tic\GestionBundle\Entity\Commentaire.
    500 Internal Server Error - LogicException
    je ne sais pas comment résoudre ce problème....

    Je tourne en rond merci de me donner un coup de main.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Points : 27
    Points
    27
    Par défaut Je réitère ma question
    Personne ne peut m'aider

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Salut,

    Je pense qu'il manque l'attribut id sur la classe enseignant "u.enseignant.id"

    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
     
     
     
            $id = $options['data'];
     
            $builder
                ->add('date','date',array('label'=> false))
                ->add('enfants','entity',array(
                        'class'=>'MonBundle:Enfant',
                        'query_builder' => function(EntityRepository $er) use ($Id) {
                                return $er->createQueryBuilder('u')
                                    ->orderBy('u.username', 'ASC')
                                    ->where("u.enseignant.id = :id")
                                    ->setParameter('id' , $Id)
                                    ;
                            },
                    ))

  16. #16
    Nouveau membre du Club
    Inscrit en
    Août 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 94
    Points : 27
    Points
    27
    Par défaut J'ai trouver dans la doc
    Voici le lien qui explique comment faire

    http://symfony.com/fr/doc/current/co...ents-user-data

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

Discussions similaires

  1. [2.x] Formulaire avec champ entity
    Par jillthe1 dans le forum Symfony
    Réponses: 8
    Dernier message: 17/08/2014, 01h56
  2. Formulaire avec champs liés à une requête
    Par willytito dans le forum IHM
    Réponses: 1
    Dernier message: 11/06/2007, 14h40
  3. ouverture formulaire avec champ vide
    Par atlantideD dans le forum IHM
    Réponses: 3
    Dernier message: 16/05/2007, 12h36
  4. formulaire avec champ calcules sur access
    Par tobisko dans le forum Access
    Réponses: 3
    Dernier message: 08/09/2006, 13h52
  5. [ODBC] Valider formulaire avec champs vides
    Par dorot dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 12/07/2006, 17h15

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