如何在Symfony 2

时间:2015-07-14 00:33:45

标签: forms entity-framework symfony checkbox

我正在研究Symfony 2中的表格。表格适用于我的项目,我的每个项目都可以是艺术,技术或项目的两个类别。起初,我尝试做一个选择,但它只允许我选择这两个类别中的一个。

比我强硬,我可以为我的实体中的每个类别生成一个选择框。这样,我可以选择我想要的类别。

- 现在,我该怎么做? - 当我将项目传递给表单时,我希望选中该复选框(如果项目是技术项目,则选择技术复选框)...我现在不知道表单是否会自行处理。

这是我的表格:

    <?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 I 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';

        }

    }

我的项目实体:

<?php

namespace PublicBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as 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();
    }


    /**
     * Get 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;
    }

    /**
     * Get 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;
    }

    /**
     * Get 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;
    }

    /**
     * Get 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;
    }

    /**
     * Get 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;
    }

    /**
     * Get 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;
    }

    /**
     * Get 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);
    }

    /**
     * Get 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;
    }

    /**
     * Get 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);
    }

    /**
     * Get categories
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getCategories()
    {
        return $this->categories;
    }
}

类别实体:

<?php

namespace PublicBundle\Entity;

use Doctrine\ORM\Mapping as 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;


    /**
     * Get 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;
    }

    /**
     * Get tag
     *
     * @return string 
     */
    public function getTag()
    {
        return $this->tag;
    }
}

1 个答案:

答案 0 :(得分:0)

使用multiple字段类型的expandedentity选项:

->add('categories', 'entity', [
    'label'=>'catégorie',
    'class'=>'PublicBundle\Entity\Categorie',
    'property'=>'tag',
    'required'=>true,
    'multiple'=>true,
    'expanded'=>true,
])

有关主题的文档:http://symfony.com/doc/current/reference/forms/types/choice.html#select-tag-checkboxes-or-radio-buttons