Options groupe in Symfony 2
Supposons que vous avez deux (2) entités : Element & CategorieElement et que vous voulez afficher sur votre formulaire les éléments dans un Select Box groupés en catégories.
Alors suivez ce pétit tuto fait pour vous. Merci
Contenu de l'entité Element :
class Element
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="libelle", type="string", length=100, unique=true)
*/
private $libelle;
/**
* @ORM\ManyToOne(targetEntity="\MainBundle\Entity\CategorieElement", cascade={"persist"}, inversedBy="elements")
* @ORM\JoinColumn(nullable=false)
*/
private $categorie;
}
Contenu de l'entité CategorieElement:
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255, unique=true)
*/
private $nom;
/**
* @ORM\OneToMany(targetEntity="\MainBundle\Entity\Element", mappedBy="categorie")
*/
private $elements;
}
Dans votre Form Type vous aurez quelque chose de ce genre:
->add('element', 'entity',
array('class'=>'MainBundle:Element',
'property'=>'libelle',
'empty_value'=>'Choisissez un élément',
'choices'=>$this->em->getRepository('MainBundle:CategorieElement')->getSelectListElement()
))
NB : N'oubliez pas de définir dans votre Form Type un constructeur comme suit:
private $em;
public function __construct(\Doctrine\ORM\EntityManage $em){
$this->em = $em;
}
Dans votre controller, lorsque vous appelerez le Form Type, passé lui l' EntityManage:
$this->createForm(new ElementType($this->getDoctrine()->getManager()) ,$object)
Dans le repository de CategorieElement, vous devez définir la fonction suivante :
public function getSelectList(){
$query = $this->createQueryBuilder('c')
->addSelect('e')
->join('c.elements','e')
->orderBy('c.nom', 'asc')
->addOrderBy('e.libelle','asc');
$list = array();
foreach ($query->getQuery()->getResult() as $cat)
{
$list[$cat->getNom()] = array();
foreach ($cat->getElements() as $el)
{
$list[$cat->getNom()][$el->getId()] = $el;
}
}
return $list;
}
Une fois cette fonction définie, alors vous pouvez aller vérifier sur votre formulaire le résultat.
Merci pour vos commentaires
Aucun commentaire:
Enregistrer un commentaire