Php Symfony2-细枝:HTML<;optgroup>;标签

Php Symfony2-细枝:HTML<;optgroup>;标签,php,html,symfony,twig,Php,Html,Symfony,Twig,我需要创建一个select with标记 这是我填写select的代码 ->add('city', 'entity', array( 'empty_value' => 'Choisissez une option', 'class' => 'FrontBundle:City', 'query_builder' => function(EntityRepository $er) {

我需要创建一个select with标记

这是我填写select的代码

        ->add('city', 'entity', array(
            'empty_value' => 'Choisissez une option',
            'class' => 'FrontBundle:City',
            'query_builder' => function(EntityRepository $er) {
                return $er->createQueryBuilder('c')
                    ->orderBy('c.city', 'ASC');
            },
        ))
这是我在html.twig中的代码

                    <div class="form-group">
                        {{ form_label(form.city, 'Ville') }}
                        <div class="col-sm-8">
                            {{ form_widget(form.city) }}
                        </div>
                    </div>

{{form_标签(form.city,'Ville')}
{{form_widget(form.city)}
以下是我想要得到的结果:

<select>
  <optgroup label="Région 1">
     <option value="ville 1">Ville 1</option>
     <option value="ville 2">Ville 2</option>
  </optgroup>
  <optgroup label="Région 2">
     <option value="ville 3">Ville 3</option>
     <option value="ville 4">Ville 4</option>
   </optgroup>
</select>

维尔1
维尔2
维尔3
维尔4
有什么想法吗?多谢各位

如上所述,您可以使用
实体
字段类型:

这是一个属性路径(例如,
author.name
),用于组织 小组中的可用选项。它仅在渲染为“选择”时有效 标记并通过在选项周围添加
optgroup
元素来实现。选择 将呈现不为此属性路径返回值的 直接位于select标记下方,没有周围的optgroup

因此,假设
region
city
的一个属性,您的代码应该如下所示:

    ->add('city', 'entity', array(
        'empty_value' => 'Choisissez une option',
        'class' => 'FrontBundle:City',
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('c')
                ->orderBy('c.city', 'ASC');
        },
        'group_by' => 'region',
    ))

我不知道您想如何对城市进行分组,但是如果您已经有一个实体的参数要使用,例如
地区
(或任何其他相关/关联),您可以在中使用它,或者您可以使用查询生成器中的groupBy子句构建optgroup树(否则您可以手动构建树)。对不起,我忘了提到我希望按地区分组。谢谢@Veve。那很有帮助。但是如何在twig.html文件中使用它。这就是Symfony2和twig的优点,您没有更多的事情要做,您的选择将自动用optgroups呈现。好的。我现在明白了。谢谢,我这样做了,但是我得到了:可捕获致命错误:类的对象。。。。。。。无法转换为字符串。有人知道我做错了什么吗?用实体的字符串属性添加
'property'=>'name'
。您也可以将
\uuu toString()
添加到实体中@D3F