How to make multiply select box from entity in a form in Symfony 2 -
i'm working on form in symfony 2. form projects , each of project can artistic, technic or both categorie of project. @ first, tried doing select, butt allow me choose 1 of 2 categories.
than tough generate select box each categories in entity. way, choose categories want.
-now, how do that? -i checkbox selected when pass project form (if project techic project, technic checkbox selected)... don't if form take care of itself.
here form:
<?php namespace adminbundle\form\type; use symfony\component\form\abstracttype; use symfony\component\form\formbuilderinterface; use symfony\component\optionsresolver\optionsresolver; class projettype extends abstracttype { public function buildform(formbuilderinterface $constructeur, array $options) { $constructeur ->add('image', 'text') ->add('technologie', 'text') ->add('annee', 'text', array('label'=>'année')) ->add('type', 'entity', [ 'class'=>'publicbundle\entity\type', 'property'=>'nom', 'required'=>true, ]) ->add('fichier', 'text') ->add('largeur', 'text') ->add('hauteur', 'text') //what had before /*->add('categories', 'entity', [ 'label'=>'catégorie', 'class'=>'publicbundle\entity\categorie', 'property'=>'tag', 'required'=>true, ])*/ ; } public function configureoptions(optionsresolver $resolver) { $resolver->setdefaults(array( 'data_class' => 'adminbundle\entity\projet', )); } public function getname() { return 'projet'; } }
my project entity:
<?php namespace publicbundle\entity; use doctrine\common\collections\arraycollection; use doctrine\orm\mapping orm; /** * projet * * @orm\table(name="pt_projet"); * @orm\entity * @orm\entity(repositoryclass="publicbundle\entity\projetdepot") */ class projet { /** * @orm\column(name="id", type="integer") * @orm\id * @orm\generatedvalue(strategy="auto") */ //id du projet protected $id; /** * @orm\onetomany(targetentity="projetint", mappedby="projet", orphanremoval=true) */ protected $descriptions; /** * @orm\column(name="pro_img", type="string", length=64, unique=true) */ //nom du fichier de l'image du projet protected $image; /** * @orm\column(name="pro_technologie_utilisee", type="text", length=200) */ //text qui liste tout les technologies utilisées pour le projet protected $technologie; /** * @orm\column(name="pro_annee", type="integer", length=4) */ //année de réalisation du projet protected $annee; /** * @orm\manytoone(targetentity="type", inversedby="projets") * @orm\joincolumn(name="pro_type", referencedcolumnname="id", nullable=false) */ //clef étrangère du type de projet //le type de projet ne correspond pas à la catégore. il peu être unity, flash, image, vidéo, etc. il permet de savoir quelle page charger pour pouvoir intégrer le projet dans le portfolio. protected $type; /** * @orm\column(name="pro_fichier", type="string", length=64, unique=true) */ //nom du fichier du projet private $fichier; /** * @orm\column(name="pro_largeur", type="integer") */ //largeur du projet protected $largeur; /** * @orm\column(name="pro_hauteur", type="integer") */ //hauteur du projet protected $hauteur; /** * @orm\manytomany(targetentity="categorie", cascade={"persist"}) */ //la ou les catégories du projet private $categories; /** * constructor */ public function __construct() { $this->descriptions=new arraycollection(); $this->categories=new arraycollection(); } /** * id * * @return integer */ public function getid() { return $this->id; } /** * set image * * @param string $image * @return projet */ public function setimage($image) { $this->image = $image; return $this; } /** * image * * @return string */ public function getimage() { return $this->image; } /** * set technologie * * @param string $technologie * @return projet */ public function settechnologie($technologie) { $this->technologie = $technologie; return $this; } /** * technologie * * @return string */ public function gettechnologie() { return $this->technologie; } /** * set annee * * @param integer $annee * @return projet */ public function setannee($annee) { $this->annee = $annee; return $this; } /** * annee * * @return integer */ public function getannee() { return $this->annee; } /** * set fichier * * @param string $fichier * @return projet */ public function setfichier($fichier) { $this->fichier = $fichier; return $this; } /** * fichier * * @return string */ public function getfichier() { return $this->fichier; } /** * set largeur * * @param integer $largeur * @return projet */ public function setlargeur($largeur) { $this->largeur = $largeur; return $this; } /** * largeur * * @return integer */ public function getlargeur() { return $this->largeur; } /** * set hauteur * * @param integer $hauteur * @return projet */ public function sethauteur($hauteur) { $this->hauteur = $hauteur; return $this; } /** * hauteur * * @return integer */ public function gethauteur() { return $this->hauteur; } /** * add descriptions * * @param \publicbundle\entity\projetint $descriptions * @return projet */ public function adddescription(\publicbundle\entity\projetint $descriptions) { $this->descriptions[] = $descriptions; return $this; } /** * remove descriptions * * @param \publicbundle\entity\projetint $descriptions */ public function removedescription(\publicbundle\entity\projetint $descriptions) { $this->descriptions->removeelement($descriptions); } /** * descriptions * * @return \doctrine\common\collections\collection */ public function getdescriptions() { return $this->descriptions; } /** * set type * * @param \publicbundle\entity\type $type * @return projet */ public function settype(\publicbundle\entity\type $type) { $this->type = $type; return $this; } /** * type * * @return \publicbundle\entity\type */ public function gettype() { return $this->type; } /** * add categories * * @param \publicbundle\entity\categorie $categories * @return projet */ public function addcategory(\publicbundle\entity\categorie $categories) { $this->categories[] = $categories; return $this; } /** * remove categories * * @param \publicbundle\entity\categorie $categories */ public function removecategory(\publicbundle\entity\categorie $categories) { $this->categories->removeelement($categories); } /** * categories * * @return \doctrine\common\collections\collection */ public function getcategories() { return $this->categories; } }
category entity:
<?php namespace publicbundle\entity; use doctrine\orm\mapping orm; /** * catégorie * * @orm\table(name="pt_categorie"); * @orm\entity * @orm\entity(repositoryclass="publicbundle\entity\categoriedepot") */ class categorie { /** * @orm\column(name="id", type="integer") * @orm\id * @orm\generatedvalue(strategy="auto") */ //id de la catégorie protected $id; /** * @orm\column(name="cat_tag", type="string",length=255, unique=true) */ //tag de la catégorie protected $tag; /** * id * * @return integer */ public function getid() { return $this->id; } /** * set tag * * @param string $tag * @return categorie */ public function settag($tag) { $this->tag = $tag; return $this; } /** * tag * * @return string */ public function gettag() { return $this->tag; } }
use multiple
, expanded
options of entity
field type:
->add('categories', 'entity', [ 'label'=>'catégorie', 'class'=>'publicbundle\entity\categorie', 'property'=>'tag', 'required'=>true, 'multiple'=>true, 'expanded'=>true, ])
documentation on topic: http://symfony.com/doc/current/reference/forms/types/choice.html#select-tag-checkboxes-or-radio-buttons
Comments
Post a Comment