Symfony复选框列出了枝条渲染

时间:2017-05-17 13:22:06

标签: php mysql forms symfony doctrine

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

实体:

应用程序与能力相关联多少

与分类相关的能力多对一

所以在ApplicationType中我有:

->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个能力可供选择,它不是用户友好的。

  • 'expanded'=> true:显示按类别分组的权限列表复选框,但不显示类别。

有人会有想法吗?

1 个答案:

答案 0 :(得分:0)

如果您想使用所有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');
}

另一种方法是在@ORM\OrderBy({...})Compentence之间的关系中尝试Category注释。 C standard

  

'expanded'=> true:显示按类别分组的权限列表复选框,但不显示类别。

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

您可以创建自己的FormType并扩展Twig-Widgets。 ...或者你可以尝试用See link(embedet)形式获得所需的外观...但这只是想法,因为我不知道你的实体及其关系是什么样的。