2017-05-17 73 views
0

我是Symfony的新手,我有一個具體的問題。 我有一份工作申請表,申請人可以選擇與類別相關的能力。Symfony複選框列出樹枝渲染

實體:

應用程序鏈接到儘可能多的能力,以掛類別很多

Compentence爲多對一

所以在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:顯示的權限列表複選框按類別分組顯示,但不顯示類別。

有人有想法嗎?

+0

你想要渲染哪一個,選擇哪一個就像你想要訂購或複選框? –

+0

作爲複選框的能力,按類別分組,顯示爲每組複選框標題的類別名稱 –

回答

0

如果你想改變順序secect所有Competence可能比你應該延長您的查詢構建器與加入

'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之間的關係@ORM\OrderBy({...})註解。 See link

'expanded'=> true:顯示的權限列表複選框按類別分組顯示,但不顯示類別。

這是正確的,因爲它是從ChoiceType繼承的選項。只有在您將其渲染爲<SELECT>下拉列表時,才能使用<optgroup>進行分組。我認爲沒有辦法從symfony的FormTypes的任何分組中得到一堆(列表)的複選框..至少沒有任何額外的報價。

您可以創建自己的FormType並擴展Twig-Widget等。 ......或者你可以嘗試用(embedet)Forms的Collection來獲得所需的外觀...但這只是想法,因爲我不知道你的實體和它們之間的關係是怎樣的。

+0

非常感謝,代碼正常工作! ORM的提示很好,我一定會在我的項目中使用它,它看起來很方便。 –