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 :

recuperer les donnees utilisateur connecté SF2


Sujet :

Symfony PHP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut recuperer les donnees utilisateur connecté SF2
    bjr

    débutant sur SF2 je travail sur une application elearning. je veux récupérer les l'ensemble des formation sur les quelle un etudiant est inscris. pour la gestion des étudiant j'utilise FOSUser sachant que l'entité user est liee a l'entité formation avec la relation onetomany

    j'arrive a recuperer l'id user mais je ne sais pas comment l'utiliser pour recuperer les formation le concernant sur l'entité formation

    merci pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 98
    Points : 163
    Points
    163
    Par défaut
    Bonjour, est-ce que tu peux poster tes entités ?
    Idealement un bout de code sur lequel t'as bossé ce serait un bon début.

    Ps : Une formation peut avoir 1 ou plusieurs de stagiaires, un stagiaire peut avoir 1 ou plusieurs formations, pour moi c'est une relation manyToMany.

  3. #3
    Membre habitué
    Ingénieur d'études et de développement
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur d'études et de développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    Dans ton entity provider tu peux spécifier la méthode de récupération de ton entité. Tu ajoutes tes jointures et le tour est joué.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 98
    Points : 163
    Points
    163
    Par défaut
    Citation Envoyé par damiensan Voir le message
    Dans ton entity provider tu peux spécifier la méthode de récupération de ton entité. Tu ajoutes tes jointures et le tour est joué.
    Attention ajouter du traitement dans une entity est considéré comme une mauvaise pratique, si son mapping est bon, il dois faire un simple findAll() depuis le controlleur, si ce n'est pas le cas un pti coup de queryBuilder.
    Il utilise FOSUserBundle, il ne dois surtout pas toucher à l'entity provider.

    Dans tous les cas il dois montrer ses entités User et Formation

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    Tu peux faire une relation bidirectionnelles entre tes entités.

    Dans ton entités User tu auras une propriété $formations de type ArrayCollection contenant toutes les occurrences des formation.

    Ensuite pour accéder à la liste des formations de l'utilisateur (depuis le controller par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $formations = $user->getFormations();
    Après tu peux itérer sur $formations avec un foreach par exemple pour accéder individuellement à chacune des formations.

  6. #6
    Membre habitué
    Ingénieur d'études et de développement
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur d'études et de développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par garniture Voir le message
    Attention ajouter du traitement dans une entity est considéré comme une mauvaise pratique, si son mapping est bon, il dois faire un simple findAll() depuis le controlleur, si ce n'est pas le cas un pti coup de queryBuilder.
    Il utilise FOSUserBundle, il ne dois surtout pas toucher à l'entity provider.

    Dans tous les cas il dois montrer ses entités User et Formation
    Qu'est ce que tu racontes ? O_o

    Faire un findAll() ?? bonjour le niveau de performance si tu as 12 000 000 d'utilisateurs.

    De plus ta récupération de données doit se faire dans un service, qui est précisément l'entity provider.

    Tu dois surcharger l'entity provider de FOS et spécifier une jointure dans la méthode loadUserByUsername, de cette façon tu auras dans la variable 'user' du contexte de sécurité ton utilisateur et toutes ses formations en une seule requête.
    Ca c'est si tu souhaites par exemple afficher les formations de ton utilisateur connecté.

    Si tu souhaites afficher une liste des utilisateurs avec leur formations. Une simple requête avec jointure dans ton repository te permet de le faire. Et comme dit précédemment tu pourras boucler sur les formations de chaque utilisateur avec un simple foreach

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Je te suggère d'utiliser des subscriber

  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
    Citation Envoyé par damiensan Voir le message
    Qu'est ce que tu racontes ? O_o

    Faire un findAll() ?? bonjour le niveau de performance si tu as 12 000 000 d'utilisateurs.

    De plus ta récupération de données doit se faire dans un service, qui est précisément l'entity provider.

    Tu dois surcharger l'entity provider de FOS et spécifier une jointure dans la méthode loadUserByUsername, de cette façon tu auras dans la variable 'user' du contexte de sécurité ton utilisateur et toutes ses formations en une seule requête.
    Ca c'est si tu souhaites par exemple afficher les formations de ton utilisateur connecté.

    Si tu souhaites afficher une liste des utilisateurs avec leur formations. Une simple requête avec jointure dans ton repository te permet de le faire. Et comme dit précédemment tu pourras boucler sur les formations de chaque utilisateur avec un simple foreach
    D'accord pour le findAll => très mauvaise idée. D'autant plus que ce n'est pas du tout ce qui est demandé.

    Une simple requête avec jointure dans le repository permet effectivement d'afficher une liste des utilisateurs avec leurs formations.
    Du coup si une requête peut faire ça, elle peut aussi faire une simple requête avec jointure dans le repository pour afficher un seul utilisateur avec ses formations.
    J'avoue ne pas avoir bien saisi l'intérêt d'utiliser l'entity provider dans ce cas de figure : qu'est-ce que ça apporte de plus ?

    Le problème n'est pas compliqué : un user a des formations. On les récupère en faisant $user->getFormations().

    Il ne veut pas récupérer des users, il ne veut pas récupérer les formations d'une liste de users. Il veut les formations d'un user : c'est récupérer la collection d'un objet c'est tout.
    En tant que débutant Symfony, vu la faible complexité du cas, et vu qu'il ne nous dit ni comment il récupère l'id de son user, ni dans quelle classe il se trouve, on ne peut pas en dire beaucoup plus ni suggérer des moyens d'optimisation.

    Pour faire plaisir à damiensan je vais aussi proposer ma réponse saugrenue :
    troll mode on* : Je te suggère d'utiliser des subscriber twig de repository dans lesquels tu devra dispatcher le CompilerPass....et la POO

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 98
    Points : 163
    Points
    163
    Par défaut
    @damiensan Merci de me faire remarquer que j'ai conseillé un findAll, je pensais à un findBy.
    Je persiste l'entity provider ne sert pas dans ce cas de figure.
    Je persiste c'est surement une ManyToMany
    Je persiste tant qu'il ne montre pas ses entités dur dur de l'aider...

  10. #10
    Membre habitué
    Ingénieur d'études et de développement
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur d'études et de développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    Ok tu persistes beaucoup… mais est-ce que tu flush ?

    En fait, je proposais l'entity provider car il a parlé de FOSUser. S'il veut afficher les formations de l'utilisateur connecté, il pourra directement les avoir dans le contexte de sécurité sans faire de requête supplémentaire.
    Après si c'est pour le faire dans un controller, c'est clair qu'on se pend la tête pour pas grand chose, un requête de répo et hop c'est fini. (en relation n-n je pense aussi)

    Un conseil, lis la doc de Symfony. C'est expliquer dans les tout premiers chapitres car ton "problème" est la base de ce que tu peux faire avec Sf et Doctrine

Discussions similaires

  1. [JTable] recuperer les donnees
    Par clemouf dans le forum Composants
    Réponses: 3
    Dernier message: 08/02/2019, 15h44
  2. Réponses: 5
    Dernier message: 06/07/2010, 15h16
  3. Recuperer Les Donnees D'une Table
    Par brute dans le forum Oracle
    Réponses: 9
    Dernier message: 12/05/2006, 12h01
  4. [VB6]recuperer les donnees telephones sur un serveur
    Par Bouassa dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/03/2006, 10h02
  5. [Applets] Recuperer les donnees
    Par calypso dans le forum Applets
    Réponses: 11
    Dernier message: 05/04/2005, 16h18

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