SonataUserBundle 覆盖 EditableRolesBuilder

Posted

技术标签:

【中文标题】SonataUserBundle 覆盖 EditableRolesBuilder【英文标题】:SonataUserBundle overriding EditableRolesBuilder 【发布时间】:2015-02-08 13:44:52 【问题描述】:

我正在尝试覆盖 Security 文件夹中的 EditableRolesBuilder。

我尝试在 Application\Sonata\UserBundle\Security\EditableRolesBuilder 其中 扩展了基础 Sonata\UserBundle\Security\EditableRolesBuilder 来自供应商,但没有成功。 我尝试覆盖服务 Sonata\UserBundle\Resources\config\admin.xml,传递我的自定义类 但我找不到任何地方如何覆盖整个服务。这项服务 没有参数但硬编码的类,我不能把它传入 config.yml

【问题讨论】:

这不是一个简单的方法,您必须覆盖 securityRolesType + 转换器才能正常工作 【参考方案1】:

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

sonata.user.editable_role_builder sonata.user.form.type.security_roles

定义如下所示

    <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>

参考见Sonata Admin Override Security Roles Handler

【讨论】:

以上是关于SonataUserBundle 覆盖 EditableRolesBuilder的主要内容,如果未能解决你的问题,请参考以下文章

自 Symfony2 更新到 2.8 以来覆盖注册表单(SonataUserBundle)

Symfony2 / SonataUserBundle - 注册后自动登录

Sonata Admin Bundle + Sonata User Bundle:覆盖登录表单

SonataUserBundle 的 check_path 异常

获取用户列表时发生 SonataUserBundle 错误

SonataUserBundle 和 Symfony 3.4