symfony2表单,包含多个实体

时间:2014-01-08 17:58:54

标签: symfony

我有这种形式与许多托马尼关系完美地工作:

    public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
            ->add('manifestations', 'entity', array(
                'class' => 'PrifProtocoleBundle:Manifestation',
                'multiple' => true,
                'expanded' => false,
                'property' => 'libelle',
                'empty_value' => 'Choississez',
                'required' => false,));
}

但我想将''multi''参数设置为'false',这样,我只有一个带有Choississez选项的选择框,所以当我点击它时,它会显示所有其他值。不幸的是我收到一条错误消息:方法_ set()“或” _call()“也没有,并且在课堂上有公共访问权限。我一直在网上搜索一些解决方案并试过这一个:

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
            ->add('manifestations', 'collection', array(
                'type' => 'entity', 
                'options' => array(
                'class' => 'AcmeProtoBundle:Manifestation',
                'multiple' => false,
                'expanded' => false,
                'property' => 'libelle',
                'empty_value' => 'Choisissez',
                'required' => false,)));
}

我没有错误消息!但是即使我将'multiple'设置为'true',我也只显示选择表单,我只有提交按钮,点击时会显示结果,所以我想我会错过显示表格的参数!

任何人都可以帮忙吗?感谢

Manifestation.php

/**
 * @ORM\Entity
 * @ORM\Entity(repositoryClass="ManifestationRepository")
 */

班级表现{

public function __construct() {

    $this->dateCreation = new \DateTime;
    $this->dateModif = new \DateTime;
}

public function __toString() {
    return $this->getLibelle();
}

/**
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\Id
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @ORM\Column(type="integer")
 * @Assert\GreaterThan(
 *      value = 0,
 *      message = "La valeur doit être positive"
 * )
 */
private $numOrdre;

/**
 * @ORM\Column(type="string",length=50)
 * @Assert\Length(
 *      min = "5",
 *      minMessage = "Le libellé doit faire au moins {{ limit }} caractères"
 * )
 */
private $libelle;

/**
 * @ORM\Column(type="datetime")
 */
private $dateCreation;

/**
 * @ORM\Column(type="datetime")
 */
private $dateModif;

/**
 * @ORM\Column(type="boolean")
 * @Assert\NotBlank( message=" ")
 */
private $etat;

//getters and setters

invite.php

/**
 * @ORM\Entity
 * @ORM\Entity(repositoryClass="InviteRepository")
 * 
 */

类邀请{

 /**
 * @var boolean
 *
 * @ORM\ManyToMany(targetEntity="Acme\ProtoBundle\Entity\Manifestation", cascade={"persist"})
 * @Assert\NotBlank(message=" ")
 */
private $manifestations;

2 个答案:

答案 0 :(得分:0)

你能展示你的manifestation.php文件(你的实体)吗?

多个没有您要查找的行为:多个用于允许用户检查多个复选框(true)或仅检查一个(false)给定的表格(symfony doc : multiple)。

在您的情况下,常见的解决方案是在父字段上使用javascript来禁用/启用子字段。如果你这样做,请务必在这些字段上添加服务器端验证。

答案 1 :(得分:0)

这是现在使用'multiple'=>为我工作的解决方案假“:

我已将此函数添加到与Manifestation相关的其他实体中,以将表现形式视为数组

    public function setManifestations($manifestations){
    if(!is_array($manifestations)){
        $manifestations = array($manifestations);
    }
    $this->manifestations = $manifestations;
}