我正在顯示一個過濾的集合的實體的html表,我想在每一行中顯示一個複選框作爲表單的一部分,將添加選定的實體到會議變種。建立一個表格,爲每個實體在一個學說集合
我在想,每個複選框應該有實體ID作爲它的值,我會從表單字段數據獲得一個ID數組(好吧,所以這個值應該是實體的間接引用,但是爲了簡單起見)。
我試過創建一個表單類型與單個實體類型字段映射到該實體的id屬性,並嵌入到另一個具有集合類型字段的表單類型。
class FooEntitySelectByIdentityType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('foo_id', 'entity', array(
'required' => false,
'class' => 'MeMyBundle:FooEntity',
'property' => 'id',
'multiple' => true,
'expanded' => true
));
}
# ...
和
class FooEntitySelectionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('identity', 'collection', array(
'type' => new FooEntitySelectByIdentityType,
'options' => array(
'required' => false,
'multiple' => true,
'expanded' => true,
'attr' => array('class' => 'foo')
),
));
}
# ...
和在控制器的形式與實體的集合作爲初始數據創建
$form = $this
->createForm(
new \Me\MyBundle\Form\Type\FooEntitySelectionType,
$collection_of_foo
)
->createView()
;
當表單被呈現有用於單個標籤身份字段,但沒有小部件。
它甚至有可能以這種特定的方式使用實體和集合類型字段? 如果是這樣,我可能會做錯什麼?
工作!整個方法的缺點是'$ form-> getData()'返回一個包含實體集合而不是純整數ID的數組,但我認爲好處是不能有無效的ID保存到會話中。謝謝@jah! – jah
請注意,如果您嘗試將字符串用作標識符,則此方法不起作用。然後'EntityChoiceList'將爲孩子創建基於整數的索引,並且'form_widget'調用將拋出一個異常。 :( – althaus
我也遇到了這個麻煩。是否有更簡單的方法來解決這個簡單的問題? –