Symfony表单-包含复选框的集合类型

Symfony表单-包含复选框的集合类型,symfony,symfony-forms,symfony5,Symfony,Symfony Forms,Symfony5,我使用的是Symfony 5,我希望在管理中有一个“用户编辑”页面,在其中我将更改用户角色,我希望有复选框来定义分配给用户的角色,因此,我需要包含复选框类型条目的集合类型(如果我为true),但首先我不能使用用户角色数组作为集合类型的值 $builder ->add('roles', CollectionType::class, [ 'entry_type' => CheckboxType::class, 'entry_

我使用的是Symfony 5,我希望在管理中有一个“用户编辑”页面,在其中我将更改用户角色,我希望有复选框来定义分配给用户的角色,因此,我需要包含复选框类型条目的集合类型(如果我为true),但首先我不能使用用户角色数组作为集合类型的值

$builder
        ->add('roles', CollectionType::class, [
            'entry_type' => CheckboxType::class,
            'entry_options' => [
                'required' => false,
            ],
        ])
这会引发错误

无法转换属性路径“[0]”的值:应为布尔值。

之后,我尝试使用模型转换器来更改值,下面是我如何做到这一点的代码

$builder->get('roles')
        ->addModelTransformer(new CallbackTransformer(
            function($rolesAsArray){
                $rolesAsArray = array_flip($rolesAsArray);
                foreach($rolesAsArray as &$role){
                    $role = true; // I also tried to set key instead of value - true
                }
                return $rolesAsArray;
            },
            function($rolesAsString){
                dump($rolesAsString);die;
            }
        ));
在这之后,我没有得到一个错误,但是我得到了这个外观的表单

因此,我没有任何更改标签的选项,即使我提交带有这些字段的表单,也会抛出错误

属性路径“角色”处给定的类型为“array”、“null”的预期参数。

我找到了一种使用复选框的方法,但我找不到任何使用复选框的方法


如果您有任何想法,请告诉我。

您可以使用ChoiceType:

$builder->add('roles', ChoiceType::class, array(
                'label' => 'form.label.role',

                'choices' => User::ROLES,
                'choice_translation_domain' => 'user',
                'multiple'  => true,
                'expanded' => true,
                'required' => true,
                ));
在用户实体中:

const ROLES = array(
    'roles.admin' => 'ROLE_ADMIN',
    'roles.secretary' => 'ROLE_SECRETARY',
    'roles.user' => 'ROLE_USER'
);

不,我需要有多个角色,使用我已经做过的选择框,这并不难,问题是要将此功能与复选框结合使用。当您使用ChoiceType与multiple=true和expanded=true结合使用时,我将其用于我的用户角色