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 entités séléctionnées [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut Formulaire avec entités séléctionnées
    Bonsoir à tous.

    Voilà, je vous expose mon problème.

    J'ai un site multi-utilisateurs.

    Chaque utilisateur peut créer X Clubs.
    Ensuite chaque utilisateur peut créer X Plannings, en sachant qu'un planning est rattaché à un club.

    Donc dans mon formulaire d'ajout de planning, j'ajoute un champ Club.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // class PlanningType extends AbstractType
    $builder->add('club', 'entity', array(
        'class' => 'Sf\\DashBundle\\Entity\\Club',
        'property' => 'nom',
    ));
    Juqu'ici, tout roule.
    Par contre je ne trouve pas la méthode pour limiter l'affichage de la liste des clubs à celle que l'utilisateur connecté possède (Entité User avec fonction getClubs())

    J'ai essayé plusieurs méthodes :
    J'envois mon User comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // class PlanningsController extends Controller
    $user = $this->get('security.context')->getToken()->getUser();
    $form = $this->createForm(new PlanningType(), $planning , array(
        'empty_data' => $user 
    ));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // class PlanningType extends AbstractType
     
    // Je récupère mon utilisateur (ca fonctionne, j'ai vérifié)
    $user = $options['empty_data'];
     
    $builder->add('club', 'entity', array(
        'class' => 'Sf\\DashBundle\\Entity\\Club',
        'property' => 'nom',
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('c')
                ->where('c.user = :user')
                ->setParameter('user' , $user->getId());
            }
    ));
    Le User récupéré est bien mon utilisateur connecté, mais impossible de filtrer par utilisateur, il me dit que $user n'est pas définit (il ne doit pas passer dans la fonction je pense) : "Notice: Undefined variable: user". Pour info si le modifie $user->getId() par l'Id de mon utilisateur, ça fonctionne très bien...

    J'ai donc essayé de surcharger la fonction avec EntityRepository + User, ça ne fonctionne malheureusement pas... Il faudrait juste faire passer l'user dans cette fichue fonction de filtre !

    Je ne sais pas si c'est suffisament clair ! lol
    Si vous avez déjà résolu ce problème, ou même d'une autre façon, je vous écoute avec grande attention !

    Merci beaucoup,
    Alexandre

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Salut,

    Beau travail tu as presque fini, il te manques une petite astuce PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'query_builder' => function(EntityRepository $er) use($user) {
            return $er->createQueryBuilder('c')
                ->where('c.user = :user')
                ->setParameter('user' , $user->getId());
            }
    Le "use($user)" sert a "passer la variable $user a la fonction, sans que ce soit un argument"

    Mais attention c'est moyen propre. C'est mieux de mettre cette fonction dans le repository de ton entite club, et de faire comme ca (tire de mon code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ->add('account', 'entity', array(
               'class'         => 'AssoBookBundle:Account',
               'query_builder' => function($repo) use($wrap_id) { return $repo->getQueryChoicelist($wrap_id); },
           ))

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut
    Merci beaucoup ! Je ne connaissais pas la commande use !
    J'ai été voir, ça a l'air nouveau depuis php 5.3.

    Merci beaucoup en tout cas !!!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut
    Merci pour cette aide au combien utile!

    Par contre j'ai une question qui vient...

    J'ai fait la modif sur mon code et j'ai bien un <select> avec juste les elements que je veux.
    Via de l'ajax, j'ajoute des couples clé/valeur dans le <select>... par contre je ne passe plus dans le if ($form->isValid()) lorsque je submit.
    J'ai donc un message disant que la valeur passée au <select> n'est pas valide.

    Comment faire pour retomber sur nos pattes pour pouvoir enregistrer en base le nouvel élément ?

    Merci

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Ton ajax qui ajoute une entrée au select, il va faire la requete sur le serveur pour ajouter l'entrée dans la bdd aussi ?

    Il faut, sinon symfony ne connait pas ta nouvelle entrée et te dit à juste titre qu'elle n'est pas bonne.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 20
    Par défaut
    Dans le principe de mon "appli", on cré une activité qui peut avoir des contacts associés ou pas.

    Le formulaire de saisi des infos de l'activité permet juste de saisir un debut de nom de contact : "Hercu"... et une requete ajax vers la BDD remonte "hercule poireau" qu'on peut décider d'ajouter au <select> des contacts associés.

    A la création de l'activité de l'agenda, la liste est donc vide... et au fur et à mesure on peut ajouter et supprimer les contacts.

    D'autre piste à proposer pour m'aider à enregistrer mes contacts d'activités?

    Merci

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

Discussions similaires

  1. [2.x] [Form] Formulaire avec deux entités abstraites
    Par L0rD59 dans le forum Symfony
    Réponses: 1
    Dernier message: 24/03/2013, 21h43
  2. [2.x] Champ de formulaire dynamique avec entités
    Par thomm543 dans le forum Symfony
    Réponses: 0
    Dernier message: 30/10/2012, 17h21
  3. Créer un formulaire avec VBA ?
    Par Jean Bonnisme dans le forum VBA Access
    Réponses: 3
    Dernier message: 14/10/2004, 10h40
  4. Réponses: 10
    Dernier message: 10/06/2004, 16h20
  5. Gestion de formulaire avec xml et sans serveur ?
    Par meliane dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 05/05/2004, 19h57

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