我对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');
}
另一种方法是尝试在Compentence
和Category
之间的关系中@ORMOrderBy({...})
注释。见链接
"展开" => true:按类别分组显示的能力复选框列表,但不显示类别。
这是正确的,因为它是从ChoiceType
继承的选项。仅当将其呈现为<SELECT>
下拉列表时,才可以使用<optgroup>
进行分组。我认为没有办法从symfony的FormType中获得一堆(列表(带有任何分组的复选框。至少没有任何额外的报价。
当然,您可以创建自己的FormType并扩展Twig-Widgets等等。或者您可以尝试通过(嵌入(表单集合获得所需的外观......但这只是想法,因为我不知道你的实体及其关系是什么样的。