Symfony复选框列出了树枝渲染



我对Symfony很陌生,我有一个具体的问题。我有一个工作申请表格,申请人可以选择与类别相关的能力。

实体:

与能力相关的应用程序从多到多

忏悔与类别多对一

所以在应用程序类型中,我有:

->add('competences', EntityType::class, array(
    'class'        => 'SanOffresBundle:Competence',
    'label' => 'Compétences (sélectionnez-en autant que vous voulez)',
    'choice_label' => 'nom',
    'multiple'     => true,
    'expanded' => true,
    'query_builder' => function (CompetenceRepository $er) {
        return $er->createQueryBuilder('cc')
        ->orderBy('cc.nom', 'ASC');},
    'group_by' => function($val, $key, $index) {
        return $val->getCategorie()->getNom();},        
    ))

有了这段代码和变体,我得到了:

  • 'expanded' => false :具有按类别排序的能力的菜单,但类别不按字母顺序排列。如果对类别进行排序,这将是一个可以接受的选择,但有超过 100 种能力可供选择,它对用户不友好。

  • "展开" => true:按类别分组显示的能力复选框列表,但不显示类别。

有人有想法吗?

如果您想更改所有Competence的 secect 顺序,那么您可能应该使用 join 扩展您的查询构建器

'query_builder' => function (CompetenceRepository $er) {
        return $er->createQueryBuilder('cc')
               ->join('cc.category', 'cat') //something like that
               ->orderBy('cat.name', 'ASC')->addOrderBy('cc.nom', 'ASC');
}

另一种方法是尝试在CompentenceCategory之间的关系中@ORMOrderBy({...})注释。见链接

"展开" => true:按类别分组显示的能力复选框列表,但不显示类别。

这是正确的,因为它是从ChoiceType继承的选项。仅当将其呈现为<SELECT>下拉列表时,才可以使用<optgroup>进行分组。我认为没有办法从symfony的FormType中获得一堆(列表(带有任何分组的复选框。至少没有任何额外的报价。

当然,您可以创建自己的FormType并扩展Twig-Widgets等等。或者您可以尝试通过(嵌入(表单集合获得所需的外观......但这只是想法,因为我不知道你的实体及其关系是什么样的。

最新更新