Bonjours à tous,
Je travaille sur un projet qui me demande de lister un champ (Mysql) en colonne et non sur une seule ligne. Malheureusement je ne suis pas encore suffisament familier avec Symfony 2 pour le faire.
Merci d'avance
Version imprimable
Bonjours à tous,
Je travaille sur un projet qui me demande de lister un champ (Mysql) en colonne et non sur une seule ligne. Malheureusement je ne suis pas encore suffisament familier avec Symfony 2 pour le faire.
Merci d'avance
Salut,
Je pense qu'il te suffit de récupérer la valeur de ton champ et ensuite d'utiliser l'explode du PHP :)
Bonne soirée.
Est-ce possible dans une page twig
C'est possible, mais il me semble que c'est mieux à faire dans le contrôleur (plutôt même le modèle, si tu veux faire du propre).
Je vous montre le code je ne comprends pas bien alors si vous avez une solution pour moi...
Code:
1
2
3
4
5 $em = $this->getDoctrine()->getEntityManager(); $entities = $em->getRepository('AdminVocabulaireBundle:voc')->findAll(); $exp = explode(' ',$entities); return array('entities' => $exp);
Ha oui effectivement tu as rater quelques trucs :)
Tu devrais relire ce passage de la documentation de twig :
http://www.twig-project.org/doc/templates.html#for
Ou un exemple plus complet :
http://www.dobervich.com/2011/03/15/...ing-doctrine2/
Ton $entitites est déjà un objet contenant toutes les lignes. Tu n'as donc pas besoin de l'explode tout va bien se faire dans ton template.
Si je comprends bien
devrait faire l'affaire, mais cela ne fonctionne pas...Code:
1
2
3
4
5
6 <h1>Members</h1> <ul> {% for user in users %} <li>{{ user.username|e }}</li> {% endfor %} </ul>
merci encore de vos précieux conseils
Il n'y a aucun message d'erreur seulement je n'arrive pas à faire une colonne à la place d'une ligne...
j'obtiens ce la:
Aujourd'hui demain hier jamais tranquillement petit demain progressivement
mais je veux cela
Aujourd'hui
demain
hier
jamais
tranquillement
petit
demain
progressivement
merci encore
Et tout cela provient d'un seul et même champ dans un seul et même enregistrement dans ta base de données, c'est bien ça ? Dans ce cas, explode(' ', $var) suffira. Mais le code que tu as montré ne représente pas ça : là, tu récupères tous les enregistrements de la table.
Sans ORM, quelle requête effectuerais-tu sur la table ? Quel est son schéma (plutôt la définition de l'entité, vu que c'est avec ça que tu devras travailler) ?
Voici le code dans l'entité
Code:
1
2
3
4
5
6 /** * @var string $mots * * @ORM\Column(name="mots", type="string", length=500) */ private $mots;
je connais la requête en php mais avec symfony je suis un peu perdu pour récupérer les données et les afficher(le generateur fait tout sans probleme) sauf un explode... :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 /** * Set mots * * @param string $mots */ public function setMots($mots) { $this->mots = $mots; } /** * Get mots * * @return string */ public function getMots() { return $this->mots; }
J'aurais donc plutôt fait ça ($id étant l'identifiant de l'enregistrement que tu veux) :
Par contre, je te rappelle la première forme normale des bases de données, qui contient notamment le principe d'atomicité de l'information ;) ! http://sqlpro.developpez.com/cours/standards/#L2.2.Code:
1
2
3
4 $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('AdminVocabulaireBundle:voc')->findOneBy($id); return array('entities' => explode(' ', $entity));
Merci,
Mais j'ai encore un souci
voici: l'erreur
Notice: Undefined variable: id in C:\wamp\www\Admin\src\Admin\PublicBundle\Controller\PublicController.php line 77
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 /** * @Route("/vocabulaire", name="devoirs_voc") * @Template() */ public function vocabulaireAction() { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('AdminVocabulaireBundle:voc')->findOneBy($id); return array('entities' => explode(' ', $entity)); }
Le id c'est ok mais ça ne fonctionne pas
Quel id veux-tu ? Il suffit de remplacer $id par ça. Tu peux aussi le récupérer en paramètre d'une route.
Si tu as bien une ligne en base par ligne que tu veux ce qui a l'air d'être le cas d'après ton post d'après.
C'est plus un soucis de html que de symfony.
Code:
1
2
3
4 <h1>Members</h1> {% for user in users %} {{ user.username|e }}br /> {% endfor %}
ou
Code:
1
2
3
4 <h1>Members</h1> {% for user in users %} <div>{{ user.username|e }}</div> {% endfor %}
J'ai mis dans mon controller le code que tu m'as donnée. Mais l'erreur
Notice: Undefined variable: id in C:\wamp\www\Admin\src\Admin\PublicBundle\Controller\PublicController.php line 77
500 Internal Server Error - ErrorException
apparait...je ne comprends pas..
PS je demande à mon controller PublicBundle d'aller chercher entity dans AdminVocabulaireBundle est-ce le problème.. Mais je ne crois pas puisque je peux afficher les données sauf qu'elles ne sont pas en colonne.
merci je sais que je demande beaucoup j'espère pouvoir donner un de ces jours
Le problème est pourtant simple : tu utilises une variable qui n'existe pas. Il faut donc la définir d'une manière ou d'une autre. Là, nous ne pouvons pas te présenter du code à copier-coller, ce que tu sembles vouloir, en tant que bon débutant qui souhaite absolument une solution sans même chercher à comprendre, pour venir ensuite venir pleurer sur les forums pour obtenir une autre solution toute faite et prête à copier-coller, sans jamais rien apprendre, en restant entièrement dépendant des autre, il faut absolument que tu saches de quel enregistrement tu veux les données. Sans ça, tu auras toujours ce warning. Si tu les veux tous, alors il va falloir ajouter une boucle pour itérer sur tous les éléments, explode()er tout ça et mettre le tout dans un tableau (voir l'excellent http://sylvie-vauthier.developpez.co...rand-debutant/).
En réalité je sais très facilement faire un explode avec php brute. Par contre je ne comprends pas bien symfony et les différents bundle et surtout doctrine que je n'utilise qu'avec la console. Jusqu'à présent je n'avait pas besoin d'aide mais pour ce problème particulier je ne trouve pas de solution ni dans la documentation de symfony 2 ni dans celle de Doctrine. Alors désolée d'avoir abusé de ton temps...
PS la variable existe dans l'entité AdminVocabulaireBundle:voc
Mais mon bundle AdminPublicBundle ne la voit pas.. Comme j'ai dit dans un autre post si je faisCode:
1
2
3
4
5
6
7
8
9 /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id;
aucun problème je vois les mots en ligne...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 /** * @Route("/vocabulaire", name="devoirs_voc") * @Template() */ public function vocabulaireAction() { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('AdminVocabulaireBundle:Voc')->findall(); return array('entities' => $entity); }
Est-ce que le problème est facile à résoudre surement mais je ne vois pas pour l'instant...
Alors je suis désolé encore une fois et merci à ceux qui voudront bien me répondre...
Merci mais cela ne fonctionne pas non plus...:cry:
Je vais essayer d'être clair.
Ma base contient quatre champs
id
date_debut
date_fin
mots
J'enregistre les mots dans un textarea dans le même champ(mots)
Je veux les récupérer et les mettres en colonne non pas en ligne comme cela ce fait maintenant...
Merci et j'espère exprimé mon problème clairement...
:oops:
Tu peux nous montrer ta source HTML générée au final ? Je pense comme Tolriq que c'est un problème HTML/CSS, et pas du tout Symfony ni même PHP.
J'espère avoir bien compris ce que tu m'as demandé..
Code:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title> Bienvenue sur le site de votre enfant </title> <link rel="stylesheet" href="/Admin/web/bundles/adminpublic/css/main.css" type="text/css" media="all"/> </head> <body> <div class="entete"> <h1> Bienvenue sur le site de la classe 341/431</h1> </div> <div id="menu"> <div class="element_menu"> <h3>Menu de la classe</h3> <ul> <li><a href="/Admin/web/app_dev.php/accueil"> Accueil</a></li> <li><a href="/Admin/web/app_dev.php/devoirs_semaine"> Devoirs de la semaine</a></li> <li><a href="/Admin/web/app_dev.php/verbes"> Verbes de la semaine</a></li> <li><a href="/Admin/web/app_dev.php/vocabulaire"> Vocabulaire de la semaine</a></li> <li><a href=""> Notion de grammaire</a></li> <li><a href=""> Notion de Math</a></li> </ul> </div> </div> <div id="centre"> <ul> <h3>Mots de vocabulaire du 24 au 01-10-2011</h3> <li> Aujourd'hui demain hier jamais tranquillement petit demain progressivement </li> <h3>Mots de vocabulaire du 13 au 20-09-2011</h3> <li> Moi toi lui les autres tata lala fad adfad adfadsfa fadfafd </li> </ul> </div> <div id="sfwdt4e49e57641f3e" style="display: none"></div><script type="text/javascript">/*<![CDATA[*/ (function () { var wdt, xhr; wdt = document.getElementById('sfwdt4e49e57641f3e'); if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } xhr.open('GET', '/Admin/web/app_dev.php/_wdt/4e49e57641f3e', true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.onreadystatechange = function(state) { if (4 === xhr.readyState && 200 === xhr.status && -1 !== xhr.responseText.indexOf('sf-toolbarreset')) { wdt.innerHTML = xhr.responseText; wdt.style.display = 'block'; } }; xhr.send(''); })();/*]]>*/</script> </body> </html>
Et ta vue twig ? (on va y arriver)
T'as toujours cette erreur là ?
Pour moi c'est juste ta variable PHP "$id" qui n'est pas définie, et ca n'a rien à voir avec Symfony2.Code:Notice: Undefined variable: id in C:\wamp\www\Admin\src\Admin\PublicBundle\Controller\PublicController.php line 77
Sinon, si j'ai mal compris, assures-toi que tu as bien la fonction getId() dans ton Entité. Je ne sais pas comment tu l'as générée, mais c'est cette fonction qu'appelle Twig quand tu fais un "member.id" par exemple.
Pour essayer de comprendre ton cas, ta table à 4 champs, y-a-t-il plusieurs éléments ?
Autre chose pour transformer ton champs texte "mots", en tableau par exemple pour facilement l'afficher en twig, perso j'aurais modifié directement le "getMots()" dans ton entité, pour retourner un array au lieu d'un string.
et aussi mon layoutCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 {% extends 'AdminPublicBundle::layout.html.twig' %} {% block centre %} <ul> {%for entity in entities %} <h3>Mots de vocabulaire du {{ entity.datedebut|date('d') }} au {{ entity.datefin|date('d-m-Y') }}</h3> <li> {{entity.mots|e}} </li> {% endfor %} </ul> {% endblock %}
Merci WinzooCode:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>{% block titre %} Bienvenue sur le site de votre enfant {% endblock %}</title> <link rel="stylesheet" href="{{asset('bundles/adminpublic/css/main.css')}}" type="text/css" media="all"/> </head> <body> <div class="entete"> <h1>{% block header %} Bienvenue sur le site de la classe 341/431{% endblock %}</h1> </div> <div id="menu"> <div class="element_menu"> {% block menu %} <h3>Menu de la classe</h3> <ul> <li><a href="{{ path ('accueil')}}"> Accueil</a></li> <li><a href="{{ path ('devoirs_semaine')}}"> Devoirs de la semaine</a></li> <li><a href="{{ path ('devoirs_verbes')}}"> Verbes de la semaine</a></li> <li><a href="{{ path ('devoirs_voc')}}"> Vocabulaire de la semaine</a></li> <li><a href=""> Notion de grammaire</a></li> <li><a href=""> Notion de Math</a></li> </ul> {% endblock %} </div> {% block element_menu %} {% endblock %} </div> <div id="centre"> {% block centre %} {% endblock %} </div> </body> </html>
En changeant ta fonction getMots() dans ton entité, pour retourner un tableau, il te suffirait de mettre ca dans ton twig :
Et dans ton entité, au lieu de :Code:
1
2
3
4
5 <ul> {% for mot in entity.mots %} <li>{{ mot }}</li> {% endfor %} </ul>
Tu fais :Code:
1
2
3 function getMots() { return $this->mots; }
Mais comme dis plus haut, ta table n'est pas très bonne, il faudrait une table en particulier pour ces mots, ca serait beaucoup plus logique pour ton utilisation.Code:
1
2
3 function getMots() { return explode(' ',$this->mots); }
En espérant avoir compris ton problème... :)
En réalité j'aurais préférer faire un mot un champs mais le nombre de mots varient d'une classe à l'autre c'est donc pour cette raison que j'ai choisi un textarea pour la saisi des mots donc un seule champ sinon je n'en serait pas là,Citation:
Mais comme dis plus haut, ta table n'est pas très bonne, il faudrait une table en particulier pour ces mots, ca serait beaucoup plus logique pour ton utilisation.
merci de ton aide très précieuse