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 :

[Twig] Boucle for et bdd [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut [Twig] Boucle for et bdd
    Bonjour,

    J'ai un contrôleur qui effectue une requête pour aller chercher les informations d'un utilisateur. la requete retourne un résultat masi je n arrive pas a l afficher dans ma vue twig. Si la requete retourne plussieur résultat alors la tout s affiche bien.

    Exemple j'arrive a lister tous les utilisateurs de ma bdd mais je n arrive pas a lister les information d'un utilisateur choisie. Il me dit que j'ai aucun utilsateur alors que le print_r du tableau me retourne un enregistrement

    Controleur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public function modifierUAction($id) {
            $userManager = $this->get('fos_user.user_manager');
            $users = $userManager->findUserBy(array('id' => $id)); // Pour récupérer la liste de tous les utilisateurs
            print_r($users);  / retourne bien mon tableau
            return $this->render('DemoAdminBundle::modifier_utilisateur.html.twig', array('users' => $users));
        }

    Ma vue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {% for utilisateurs in users %}
                        <tr>
                            <td>{{ utilisateurs.username }}</td>
                            <td>{{ utilisateurs.nom }}</td>
                            <td>{{ utilisateurs.prenom }}</td>
                            <td>{{ utilisateurs.email }}</td>
                            <td>{{ utilisateurs.enabled }}</td>
                        </tr>
                    {% else %}
                        <tr><td>Aucun utilsateurs n'a été trouvé.</td></tr>
                    {% endfor %}
    en revanche si je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $users = $userManager->findUserBy(array('id' => $id));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $users = $userManager->findUsers(); // Pour récupérer la liste de tous les utilisateurs
    Ca marche alors je me demande si ca ne viens pas de ma boucle for.

    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Points : 153
    Points
    153
    Par défaut
    Est-ce que tu peux nous montrer la fonction FindUserBy... je pense plutot que quand il y a qu'un seul résultat (une ligne retourné) il te renvoie un objet et que quand ta plusieurs résultats il te renvoie un tableau. donc dans le second cas il rentre bien dans le for et l'autre non...

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Merci de ta réponse. Il s'agit des fonctions de l'userManager de FOSUserbundle

    Cette fonction retourne les informations d'un seul utilisateurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      /**
         * {@inheritDoc}
         */
        public function findUserBy(array $criteria)
        {
            return $this->repository->findOneBy($criteria);
        }
    Cette fonction retourne tous les utilisateurs (Celle ci fonctionne bien)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        /**
         * {@inheritDoc}
         */
        public function findUsers()
        {
            return $this->repository->findAll();
        }

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Points : 153
    Points
    153
    Par défaut
    fais un var_dump du résultat. Tu verras s'il te renvoie un tableau d'objet ou un objet !!

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Points : 153
    Points
    153
    Par défaut
    Je viens de regarder sur Internet et findOneBy retourne bien un tableau avec un seul élément... bizarre. Enfin, fais quand même le var_dump et affiche le nous pour être sûr.

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Il me semble a 95% qu'il me retourne un array. Je vais vérifier ça ce soir.

    Si il 'agit bien d'un array tu ne vois pas de solution ?

    Si il s'agit d'un array quelle solution dois-je apporter ?

    Merci

    ps : ce n'est pas un interrogatoire c'est juste pour éviter de t'embêter ce soir

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    si c'est un array fait un for même si y'a qu'un seul élément

    et ton findUserBy, avec l'id en parametre corespond juste au find (qui lui renvoie bien qu'un element) ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $users = $userManager->find($id);
    c'est la base de Doctrine

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Dans mon premier post j'avais bien fait un for mais aucun résultat ne s affiche.

    En revanche je ne comprend pas ceci désolé

    et ton findUserBy, avec l'id en parametre corespond juste au find (qui lui renvoie bien qu'un element) ...

    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    $users = $userManager->find($id);
    c'est la base de Doctrine

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Points : 153
    Points
    153
    Par défaut
    Ah ouai , s'il met juste id en paramètre, le findUserBy est en fait un find ? donc sa serai logique que sa retourne un objet et non un tableau d'objet.
    mais s'il met plusieurs paramètres doctrine utilisera findOneBy ?

    Sinon pour ton cas si c'est bien objet qu'il te renvoie tu peux faire en twig un elseif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {%for ....%}
    ....
    {% elseif users is not empty (ou null) %}
     <tr>
                            <td>{{ users.username }}</td>
                            <td>{{ users.nom }}</td>
                            <td>{{ users.prenom }}</td>
                            <td>{{ users.email }}</td>
                            <td>{{ users.enabled }}</td>
                        </tr>
    {% else %}
    ....
    {% end if %}
    et si c'est un tableau (ce qui n'est pas possible du coup)! affiche en twig la variable, tu verras bien ce qu'il t'affichera!! lol

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par alexandre92100 Voir le message
    Dans mon premier post j'avais bien fait un for mais aucun résultat ne s affiche.

    En revanche je ne comprend pas ceci désolé

    find est la pour ça, si tu veux récupérer une entré par sa clé primaire c'est qu'il faut utiliser,
    je te conseil d'apprendre les bases de doctrine avant de te lancer dans un projet sinon tu vas jamais t'en sortir


    http://www.doctrine-project.org/docs...l-edition.html

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Oui je le sais ca en faite j'ai vu un tuto sur un autre site. Je fais un backend pour FOSUSERBundle. DU coup on m'a conseillé d'utiliser les fonction prédéfini dans USERManager de UserBUndle.

    d'après ce que j'ai pu voir dans la doc il faut faire ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $users = $userManager->findUserBy(array('id' => $id));
    Cette ligne de commande marche très bien vu que, quand je fait un print_r de $users il me renvoie un tableau avec toutes les informations de l'utilisateur choisi.

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fais un find tu verras, le findUserBy est fais pour une autre recherche que la clé primaire (par email par exemple (et encore y'a findUserByEmail), par ville)

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    après normalement t'es pas censé transmettre l'utilisateur par via sont ID mais par son username c'est qui est recommandé, et tu pourra utilisé plutot findByUsername

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Ok je vous fait confiance je vais tester ca ce soir merci

  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Bon je viens de faire un find

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function modifierUAction($id) {
            $userManager = $this->get('fos_user.user_manager');
            $users = $userManager->find($id);
            print_r($users);
            return $this->render('DemoAdminBundle::modifier_utilisateur.html.twig', array('users' => $users));
        }
    Et j'ai l'erreur suivante ce que "je comprends" car cette méthode n'existe pas dans le usermanager

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to undefined method FOS\UserBundle\Entity\UserManager::find() in C:\wamp\www\Democratie\src\Demo\AdminBundle\Controller\AdminController.php on line 31

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est parce que tu utilises le FOSUserBundle et pas Doctrine directement

    donc je te conseil de utiliser le username (et pas l'id) et de faire findByUsername

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    Oui je viens de faire ca mais en faite c est ce que rafleboss avait dit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $users = $userManager->findUserByUsername($username);
    Me retourne un object et pas un array du coup ca ne rentre pas dans ma boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Demo\UtilisateurBundle\Entity\Utilisateur Object ( [id:protected] => 2 [nom:protected] =>.............

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    normale, le username est unique, comme l'id, donc pas besoin de boucle

  19. #19
    Membre régulier
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 146
    Points : 76
    Points
    76
    Par défaut
    A oui ca fonctionne très bien merci de votre aide.

    Résolu

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

Discussions similaires

  1. [2.x] Twig, boucle for imbriquées et accès aux variables et objets
    Par cid007300 dans le forum Symfony
    Réponses: 1
    Dernier message: 12/03/2014, 08h59
  2. [Twig] Concaténation boucle for
    Par waxx59 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 19/12/2012, 10h26
  3. [2.x] Boucle for dans TWIG
    Par hx.jonathan dans le forum Symfony
    Réponses: 3
    Dernier message: 02/11/2011, 10h18
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 22h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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