2012-09-03 80 views
19

选择的Symfony2,所述select HTML组件呈现为ChoiceType对象,它确实使用也为checkboxesradiobuttons与OPTGROUP在Symfony的2.0

是否有人真的知道如何使用Symfony2中的optgroup选项渲染选择

为了完整起见,在这里我报告的例子选择OPTGROUP标签(例如,从w3cschools):

<select> 
    <optgroup label="Swedish Cars"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    </optgroup> 
    <optgroup label="German Cars"> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
    </optgroup> 
</select> 

此外,通知有一个类似的帖子here,但答案并不令人信服。

+0

这似乎是固定在sf2.1([看到该文档(http://symfony.com/doc/master/reference/forms/types/entity.html#group-通过))。你使用sf2.0还是sf2.1? – j0k

+0

SF2.0!但SF2.1现在在RC2!所以,最好等待第一个2.1的稳定版本......我应该取消这个问题吗? – JeanValjean

+0

没有不关闭,可能有一个解决方案让sip2.0上的optgroup,但我不知道它。 – j0k

回答

34

这样做:

$car_choices = array(
    'Swedish Cars' => array(
     'volvo' => 'Volvo', 
     'saab' => 'Saab', 
    ), 
    'German Cars' => array(
     'mercedes' => 'Mercedes', 
     'audi' => 'Audi' 
    ) 
); 

$form = $this->createFormBuilder() 
     ->add('car', 'choice', array(
      'label' => 'Choose your car', 
      'choices' => $car_choices, 
      )) 
     ->getForm(); 

Works的Symfony的2.0.x版本

+1

它在我的Symfony2.0.17应用程序中像一个魅力! Muchas gracias ... – JeanValjean

+0

很像symfony 1.x:数组的数组。 – j0k

+0

完美!用于实体的很好的选择。 –

16

这取决于你的实体是如何定义的,以及如何组的实体。假设分组是在你的对象中给出一个参数完成的,那么让我们说“品牌”。你可以这样做:

$builder->add('cars', null, array(
    'group_by'=> 'brand' 
)); 
+0

如何自我参考。像类别和子类别? –

+0

@Daskul抱歉,我不明白你的意思。 – Sylvain

+0

自引用关系。您有一个实体引用与其父代相同的实体类型。就像分类一样。我希望我的所有类别都在一个数据库表中,但仍然能够生成层次结构。防爆。我将创建计算机,笔记本电脑,桌面的类别,但我想要在计算机类 –