将角色分组到一个奏鸣曲形式的复选框中

Group roles into one checkbox in Sonata form

我的 Sonata 面板中有一个表单,用于为组设置角色

我想要具有与复选框相同的角色字段,因此我已将 'expanded' => true 添加到我的字段

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name')
        ->add('roles', SecurityRolesType::class, [
            'expanded' => true,
        ])
    ;
}

但我明白了

我正在尝试将这些角色 ROLE_ADMIN_USER_EDITROLE_ADMIN_USER_LIST... 分组到 ROLE_ADMIN_USER

我尝试了在这里找到的一些选项:http://symfony.com/doc/current/reference/forms/types/choice.html 但没有任何效果

如何像我的第一个屏幕截图那样使用复选框对这些角色进行分组?

谢谢

为此,您需要覆盖 Sonata base_edit_form_macro 模板并更改默认渲染

{# If field name is `roles` then override classic extended multiple select #}
{% if field_name == 'roles' %}
    <div class="form-group">
        {# Render form field name #}
        <label for="roles_field"
               class="col-sm-3 control-label"
        >
            {{ field_name|capitalize }}
        </label>
        <div id="roles_field"
             class="sonata-ba-field col-sm-9 sonata-ba-field-standard-natural"
        >
            {# Render each groups role #}
            {% for label, choices in form.roles.vars.choices %}
                {# Render group role name #}
                <label>
                    <b>{{ label }}</b>
                </label>
                {# Render each roles of a group #}
                {% for key, choice in choices %}
                    {{ form_widget(form.roles.children[key]) }}
                    {{ form_label(form.roles.children[key]) }}
                {% endfor %}
            {% endfor %}
        </div>
    </div>
{% else %}
    {{ form_row(form[field_name])}}
{% endif %}

然后角色表格将显示如下