2013-05-15 43 views
1

所以,我有一个formbuilder动作,其具有,在某种程度上,这:重写多个选择formbuilder

->add('apples_group', 'entity', 
    array(
     'class' => 'ThingMainBundle:ApplesGroup', 
     'multiple' => true, 
     'expanded' => true, 
     'property' => 'applesName' 
    ) 
) 

这目前输出作为在此代码的多选择框:

{{ form_widget(form.apples_group, { "attr": {"class": "fields-list" } }) }} 

有时 - 在不同的视图中 - 这不需要是多个,而应该是一个下拉框。有没有办法指定小部件,当你渲染这个小部件时,属性multiple应该是false?

(验证的,如果这允许为多个在这种情况下已经是在后端)

+0

我不确定在你的情况下会从一种方式切换到另一种方式,但是你可能会发现[Form Events](http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html )真的很有用。 – cheesemacfly

回答

0

这是更好地创建

// YourFormType.php 
public function __construct(Apple $apple) 
{ 
    $this->apple = $apple; 
} 

->add('apples_group', 'entity', 
    array(
     'class' => 'ThingMainBundle:ApplesGroup', 
     'multiple' => $this->apple->isMultiple() , // you set it in admin, right? 
     'expanded' => true, 
     'property' => 'applesName' 
    ) 
) 

控制器:

$entity = new Apple() ; 
$form = $this->createForm(new YourFormType($entity), $entity) ; 
+0

这对我不起作用,因为我得到的数据验证错误不是多个(因为它试图将它保存为一个值而不是作为对另一个表的引用) – Aquarion

+0

这是不同的问题,我回答了它在:http://stackoverflow.com/a/16564513/377192 – Zeljko