在Symfony2中创建只读实体的集合

时间:2015-05-22 09:19:43

标签: forms symfony collections

我的问题是关于创建实体集合。我知道“How To Embed Collection Forms”并成功使用它。但在这种情况下,我有:

简单课程

class Thing
{
  /**              
  * @ORM\ManyToMany(targetEntity="DicStyle", mappedBy="things")
  * ....
  */
  protected $styles;   

  public function __construct()
  {
     $this->styles = new ArrayCollection();
  } 
}

样式词典

class DicStyle 
{
    ..... 
}

我不需要为DicStyle对象创建表单,因为这是只读对象=字典(不可更改)。所以,我想用这样的东西创建一个表单:

$builder->add('styles', 'collection', array(
    'type'   => 'entity', 'options' => array(
        'class' => 'MyEntityBundle:DicStyle'
        )
 ))         

当然是伪代码。我无法想象如何实现它。

结果

假设,我有:

  • 表格“Thing”有一行(id = 1)。
  • 表“DicStyle”有6行(id =从1到6)。
  • 表“mtm_thing_dicstyle”(多对多表格)

在表单中,我为Thing选择了两个DicStyle(id = 3,id = 5)。所以,mtm_thing_dicstyle包含:

thing_id     dicstyle_id
--------     ------------
    1            3
    1            5

2 个答案:

答案 0 :(得分:0)

请尝试以下表单:

 $builder->add('styles', 'entity', array(
     'class' => 'MyEntityBundle:DicStyle'
     'property'=>'name' //what property do you want to see when you select,
     'multiple" => true //you'll be able to select many DicStyle
     'expanded' => false //it'll shown on a multiple choice select tag    
    )
);

答案 1 :(得分:0)

要选择表单中的一个或多个对象以将其与结果相关联,您可以使用表单字段类型" entity"。 (见form-types

$builder->add('styles', 'entity', array(
    'class' => 'MyEntityBundle:DicStyle',
    'property' => 'name', // property you want to be displayed
    'expanded' => true, 
    'multiple' => true
    )
);

这将呈现复选框,因此可以选择要引用的多个实体。

请注意,如果您使用multiple => true,则有两种选择:

  • expanded => false:呈现多选字段
  • expanded => true:呈现复选框

请参阅form-entity-type-options