Symfony在CheckboxType中转换ChoiceType

时间:2016-12-13 15:51:50

标签: php twig symfony

我的表单类型有问题。我有一个实体活动和一个其他实体类。它在 ManyToMany 中。当我显示表单时,它位于ChoiceType,但我希望它位于CheckboxType。所以我:

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>

如何获得复选框行或复选框下拉列表?

谢谢!

2 个答案:

答案 0 :(得分:2)

只需使用multipleexpanded选项即可实现此目标(Ref):

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

然后将呈现复选框。

请注意,如果您使用Doctrine ORM,null值意味着EntityType::class。否则,请使用EntityType::class'class' => Entity::class选项。

答案 1 :(得分: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');
         }
    ))