Embed form avec relation one to many
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.
Code:
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(),
));
} |
Dans mon MenuType je tente de simplement afficher le champs cultures ou d'afficher depuis une collection mais rien de concluant
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
|
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'),
))
;
}
} |
Pour vous aider, voici mes entities:
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
|
<?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;
}
} |
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 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()
);
}
} |
J'ai bien entendu limité les champs pour ne pas faire un post trop long.
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