Symfony SonataUserBundle覆盖可编辑角色生成器

Symfony SonataUserBundle覆盖可编辑角色生成器,symfony,overriding,sonata-admin,sonata,Symfony,Overriding,Sonata Admin,Sonata,我试图覆盖安全文件夹中的EditableRolesBuilder 我试着用同样的层次结构 Application\Sonata\UserBundle\Security\EditableRolesBuilder哪个 扩展基本的Sonata\UserBundle\Security\EditableRolesBuilder 来自供应商,但没有成功 我试图覆盖服务中的 Sonata\UserBundle\Resources\config\admin.xml,传递我的自定义类 但是我找不到任何地方可以覆

我试图覆盖安全文件夹中的EditableRolesBuilder

  • 我试着用同样的层次结构 Application\Sonata\UserBundle\Security\EditableRolesBuilder哪个 扩展基本的Sonata\UserBundle\Security\EditableRolesBuilder 来自供应商,但没有成功
  • 我试图覆盖服务中的 Sonata\UserBundle\Resources\config\admin.xml,传递我的自定义类 但是我找不到任何地方可以覆盖整个服务。这个服务 没有参数,但是硬编码的类,我不能传递它 config.yml

在Sonata admin中,如果您希望覆盖安全角色处理程序,则必须覆盖2个服务

  • sonata.user.editable\u角色\u生成器
  • sonata.user.form.type.security\u角色
定义如下所示

    <services>
        <service id="sonata.user.editable_role_builder" class="Acme\DemoBundle\Security\EditableRolesBuilder">
            <argument type="service" id="security.context" />
            <argument type="service" id="sonata.admin.pool" />
            <argument>%security.role_hierarchy.roles%</argument>
        </service>
        <service id="sonata.user.form.type.security_roles" class="Acme\DemoBundle\Form\Type\SecurityRolesType">
            <tag name="form.type" alias="sonata_security_roles" />
            <argument type="service" id="sonata.user.editable_role_builder" />
        </service>
    </services>


这不是一个最简单的方法,您必须覆盖SecurityRoleType+transformer才能正常工作