1

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

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

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

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

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

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

4

3 回答 3

1

几天前,我正在寻找完成完全相同的事情!我在这里使用了 Neurofr 解决方案: Symfony2,Doctrine Extensions Tree : Generate a "tree"-like dropdown Select list

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

于 2012-05-07T19:36:44.563 回答
1

如果您不需要选择父级,则可以使用 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
    ));
}
于 2012-04-30T22:01:50.750 回答
0

扩展 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() 以及可能的构造函数

于 2012-06-17T11:13:21.643 回答