Symfony 2 - 表单实体类型:如何格式化生成的下拉列表


Symfony 2 - Form Entity Type: How to format the generated drop-down?

我有一个表格,显示可供选择的类别下拉菜单。

这些类别是使用 Gedmo 树扩展设置的,因此类别可以具有子类别。

我在表单构建器中有一个自定义查询,该查询仅选择属于特定组的类别。但是,我需要能够在下拉列表中显示哪些类别是父母,哪些是孩子,例如

Parent Category 1
  -- Child Category A
  -- Child Category B
Parent Category2
  -- Child Category C

知道我如何实现这一目标吗?

另外,如何将变量从调用 formtype 的控制器传递给我的query_builder?

如果您不需要选择父级,则可以使用 optgroup 标签

<select>
    <optgroup label="Category 1">
        <option>Option 1...</option>
        <option>Option 2...</option>
        <option>Option 3...</option>
    </optgroup>
    <optgroup label="Category 2">
        <option>Option 1...</option>
        <option>Option 2...</option>
        <option>Option 3...</option>
    </optgroup>
</select>

编辑:

Symfony 2支持带有数组的optgroup标签(未经测试,可能包含错误):

public function buildForm(FormBuilder $builder, array $options)
{
    $category_choices = array(
        array('Category 1' => array(
            '1' => 'Option 1...',
            '2' => 'Option 2...',
            '3' => 'Option 3...'
        )),
        array('Category 2' => array(
            '4' => 'Option 4...',
            '5' => 'Option 5...'
        ))
    );
    $builder->add('category_list', 'choice', array(
        'label' => 'Category',
        'choices' => $category_choices
    ));
}

几天前,我希望完成完全相同的事情!我在这里使用了Neurofr解决方案:Symfony2,学说扩展树:生成类似"树"的下拉列表选择列表

这是工作。现在,我将尝试停用树中最后一个孩子的所有选项。

扩展 Symfony''Bridge''Doctrine''Form''ChoiceList''EntityChoiceList 并在 formBuilder 中使用它,例如:

$formBuilder
      ->add('parent', 'entity',
            array(
              'label' => 'Parent',
              'em' => $em,
              'class' => 'w3des''Bundle''SiteBundle''Entity''Menu',
              'choice_list' => new MenuChoiceList($em, $group, $cfg['tree']),
              'required' => false,
              'empty_value' => '----'
            ));

你必须覆盖:getEntity(),getEntities(),getIdentifierValues(),可能还有构造函数