2016-12-13 34 views
3

我的表單類型有問題。我有一個實體活動和一個其他實體類。它在ManyToMany。當我顯示錶格時,它在ChoiceType中,但我希望它在CheckboxType。所以我:Symfony轉換CheckType中的ChoiceType類型

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('libelle') 
     ->add('horraire') 
     ->add('horraireDebut') 
     ->add('horraireFin') 
     ->add('description') 
     ->add('classes'); 
} 

它顯示ChoiceType,但我希望有一個CheckboxType,所以我把它改爲:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('libelle') 
     ->add('horraire') 
     ->add('horraireDebut') 
     ->add('horraireFin') 
     ->add('description') 
     ->add('classes', CheckboxType::class); 
} 

但是,這只是顯示一個複選框,而我有幾個記錄(這似乎很好與第一個代碼)。

我form.html.twig:

<div class="form-group{% if form.classes.vars.errors|length %} has-error{% endif %}"> 
<label for="{{ form.classes.vars.id }}" class="col-sm-3 control-label no-padding-right required">Classes <span class="red">*</span></label> 
<div class="col-sm-9"> 
    {{ form_widget(form.classes,{'attr': {'class': 'form-control'}}) }} 
    {{ form_errors(form.classes) }} 
</div> 

我怎樣才能得到一個複選框線或複選框下拉列表?

謝謝!

+0

你能更詳細地描述你需要什麼?你說「複選框行或複選框下拉列表」,但我不確定這意味着什麼。如果你添加一張你需要的圖片會有所幫助。 –

回答

2

只需使用multipleexpanded選項一起實現這個(Ref):

$builder->add('classes', null, array(
    'multiple' => true, 
    'expanded' => true, 
)); 

然後複選框將被渲染。

請注意,null值代表EntityType::class萬一您使用Doctrine ORM。否則,請使用EntityType::class'class' => Entity::class選項。

+0

非常感謝,它的工作原理。 –

+0

請接受這個答案,如果它解決了您的問題,或者是找到您的解決方案最有幫助,謝謝。 – yceruto

0

爲了實現你在找什麼,你也可以嘗試用查詢生成器的EntityType:

->add('classes', EntityType::class, array(
    'by_reference' => true, 
    'multiple' => true, 
    'expanded' => false, 
    'class' => 'AppBundle\Entity\Class', 
    'property' => 'name', 
    'query_builder' => function(\Doctrine\ORM\EntityRepository $er) { 
      $qb = $er->createQueryBuilder('c'); 
      return $qb->orderBy('c.name', 'ASC'); 
     } 
    ))