Bonjour,
Je débute complètement sur Symfony2 et je bloque sur des problemes de base. J'ai effectué une rapide recherche ici et surtout des recherches sur google mais j'ai pas encore réussi à résoudre mon soucis...
Je vous expose mon problème. J'ai créé une entité Category et ai réussi à la mapper correctement avec Doctrine afin de créer la table correspondante sur ma base mysql.
Cette table contient 3 champs: id, name et parent_id.
Les champs id et name sont obligatoires, tandis que mon champ parent_id est optionnel: ce champ est valorisé si nous avons affaire a une sous catégorie, et doit rester vide si nous avons affaire à une catégorie principale.
Voici le code de mon entité:
Mon but est de faire un formulaire permettant de rajouter une catégorie. Ce formulaire aura 2 champs:
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
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140 <?php namespace XXXXBundle\Entity; use Doctrine\ORM\Mapping\ManyToOne; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="XXXBundle\Repository\CategoryRepository") * @ORM\Table(name="category") */ class Category { /** * @ORM\Id * @ORM\Column(name="id", type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\Column(type="string", length=100) */ private $name; /** * @ORM\OneToMany(targetEntity="Activity", mappedBy="category") */ private $activity; /** * @ORM\OneToMany(targetEntity="Category", mappedBy="parent") */ private $children; /** * @ORM\ManyToOne(targetEntity="Category", inversedBy="children") * @ORM\JoinColumn(name="parent_id", referencedColumnName="id") */ private $parent; public function __construct() { $this->activity = new \Doctrine\Common\Collections\ArrayCollection(); $this->children = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name */ public function setName($name) { $this->name = $name; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Add activity * * @param XXX\Entity\Activity $activity */ public function addActivity(\XXX\Entity\Activity $activity) { $this->activity[] = $activity; } /** * Get activity * * @return Doctrine\Common\Collections\Collection */ public function getActivity() { return $this->activity; } /** * Add children * * @param XXX\Entity\Category $children */ public function addCategory(\XXX\Entity\Category $children) { $this->children[] = $children; } /** * Get children * * @return Doctrine\Common\Collections\Collection */ public function getChildren() { return $this->children; } /** * Set parent * * @param XXX\Entity\Category $parent */ public function setParent(\XXX\Entity\Category $parent) { $this->parent = $parent; } /** * Get parent * * @return XXX\Entity\Category */ public function getParent() { return $this->parent; } }
- 1 champ texte pour entrer le nom de la catégorie nouvellement créée
- 1 select qui liste les catégories existantes, ainsi qu'une valeur "aucune catégorie" dans le cas où je souhaite créer une catégorie principale.
Je bloque sur la création de ce select, je ne sais pas si je dois utiliser un formBuilder avec un champ de type "choice" ou un champ de type "entity".
Voici le code de CategoryType ou j'ai mis ma méthode FormBuilder:
Je vous avoue que je suis un peu paumé sur l'ajout des champs de type choice et entity....
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
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 <?php namespace XXX\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; use XXX\Entity\Category; class CategoryType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('name', null, array('label' => 'Nom')); // $builder->add('name','choice', array( // 'label' => 'Categorie Parent', // 'choices' => array('m' => 'Male', 'f' => 'Female') // )); // $builder->add('name', 'entity', array( // 'class' => 'XXXBundle:Category', // 'query_builder' => function(EntityRepository $er) { // return $er->createQueryBuilder('c') // ->orderBy('c.name', 'ASC'); // }, // )); // $builder->add('name', 'entity', array( // 'class' => 'XXXBundle:Category', // )); } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'XXX\Entity\Category', )); } public function getName() { return 'category'; } }
J'ai aussi créé une classe CategoryRepository car apparemment c'est util si j'utilise un champ de type entité sur mon formulaire:
Si vous avez des conseils, des infos avisées pour que je puisse faire ce simple formulaire de la manière la plus simple possible, je suis tout ouïe
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
18
19
20
21 <?php namespace XXX\Repository; use Doctrine\ORM\EntityRepository; /** * CategoryRepository * * This class was generated by the Doctrine ORM. Add your own custom * repository methods below. */ class CategoryRepository extends EntityRepository { public function findAllOrderedByName() { return $this->getEntityManager() ->createQuery('SELECT c FROM XXXBundle:Category c ORDER BY c.name ASC') ->getResult(); } }
Partager