我的问题是关于创建实体集合。我知道“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选择了两个DicStyle(id = 3,id = 5)。所以,mtm_thing_dicstyle包含:
thing_id dicstyle_id
-------- ------------
1 3
1 5
答案 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
:呈现复选框