Symfony表单-带有复选框的集合类型

问题描述 投票:2回答:1

我正在使用Symfony 5,我希望在管理中有一个“用户编辑”页面,在该页面中,我将更改用户角色,我希望具有复选框以定义分配给用户的角色,因此,我需要收集类型内部带有CheckboxType条目(如果我为真),但首先我不能将用户角色数组用作集合类型的值

$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;
            }
        ));

此后,我没有收到错误,但得到的外观与此类似

screenshot of error

所以我没有任何选择来更改标签,甚至我使用这些字段提交表单也会引发错误

在属性路径“角色”中给出的“数组”类型的预期参数,“空”。

我找到了一种使用Select Box的方法,但是我找不到使用Checkbox的任何方法。

如果有什么想法请告诉我。

symfony symfony-forms symfony5
1个回答
0
投票

您可以使用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'
);
© www.soinside.com 2019 - 2024. All rights reserved.