Bonjour à tous,
Je suis face a un petit problème. Je suis certain que c'est une bétise mais ca me bloque.
J'ai donc une table menu liée a une table menuCulture en oneToMany.
Ma relation est fonctionnelle, il n'y a pas de problème pour ca.
Cependant, je souhaiterais pouvoir créer un formulaire qui me permettrais de créer un menu et dans le meme formulaire, avoir les différents formulaire menuCulture.
Pour se faire, j'ai une boucle qui ajoute des menuCulture->setLocale(...) a l'objet menu.
Dans mon MenuType je tente de simplement afficher le champs cultures ou d'afficher depuis une collection mais rien de concluant
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 public function newAction() { $entity = new Menu(); foreach (array('nl_NL', 'fr_FR', 'de_DE', 'en_US') as $culture) { $menuCulture = new MenuCulture(); $menuCulture->setLocale($culture); $entity->addCulture($menuCulture); } $em->persist($entity); $form = $this->createCreateForm($entity); return $this->render('KevinrolinbeAppmenuBundle:Menu:new.html.twig', array( 'entity' => $entity, 'form' => $form->createView(), )); }
Pour vous aider, voici mes entities:
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 class MenuType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('createdAt') ->add('active') ->add('image') //->add('cultures') ->add('cultures', 'collection', array( 'type' => new MenuCultureType(), 'allow_add' => true, 'allow_delete' => true, 'prototype' => true, 'label' => 'Cultures', 'options' => array("data_class" => 'Kevinrolinbe\AppmenuBundle\Entity\MenuCulture'), )) ; } }
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 <?php namespace Kevinrolinbe\AppmenuBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * Menu * * @ORM\Table(name="appmenu_menu") * @ORM\Entity * @ORM\HasLifecycleCallbacks */ class Menu { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\OneToMany(targetEntity="Kevinrolinbe\AppmenuBundle\Entity\MenuCulture", mappedBy="owner", cascade={"persist", "remove"}) */ private $cultures; /** * Constructor */ public function __construct() { $this->cultures = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Add cultures * * @param \Kevinrolinbe\AppmenuBundle\Entity\MenuCulture $cultures * @return Menu */ public function addCulture(\Kevinrolinbe\AppmenuBundle\Entity\MenuCulture $cultures) { $this->cultures[] = $cultures; return $this; } /** * Remove cultures * * @param \Kevinrolinbe\AppmenuBundle\Entity\MenuCulture $cultures */ public function removeCulture(\Kevinrolinbe\AppmenuBundle\Entity\MenuCulture $cultures) { $this->cultures->removeElement($cultures); } /** * Get cultures * * @return \Doctrine\Common\Collections\Collection */ public function getCultures() { return $this->cultures; } }J'ai bien entendu limité les champs pour ne pas faire un post trop long.
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 <?php namespace Kevinrolinbe\AppmenuBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * MenuCulture * * @ORM\Table(name="appmenu_menu_culture") * @ORM\Entity */ class MenuCulture { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var Kevinrolinbe\AppmenuBundle\Entity\Menu * * @ORM\ManyToOne(targetEntity="Kevinrolinbe\AppmenuBundle\Entity\Menu", inversedBy="Menu") * @ORM\JoinColumn(name="owner", referencedColumnName="id") */ private $owner; /** * @var string * * @ORM\Column(name="locale", type="string", length=255) */ private $locale; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set locale * * @param string $locale * @return MenuCulture */ public function setLocale($locale) { $this->locale = $locale; return $this; } /** * Get locale * * @return string */ public function getLocale() { return $this->locale; } /** * Set owner * * @param \Kevinrolinbe\AppmenuBundle\Entity\Menu $owner * @return MenuCulture */ public function setOwner(\Kevinrolinbe\AppmenuBundle\Entity\Menu $owner = null) { $this->owner = $owner; return $this; } /** * Get owner * * @return \Kevinrolinbe\AppmenuBundle\Entity\Menu */ public function getOwner() { return $this->owner; } public function toArray(){ return array( 'locale' => $this->getLocale(), 'title' => $this->getTitle(), 'summary' => $this->getSummary() ); } }
Sauriez vous me guider?
Car à force de tester toutes les solutions que je trouve je ne sais plus vers quoi m'orienter :/
Merci à vous,
Dyron
Partager