2

我尝试使用奏鸣曲管理包和奏鸣曲包。我已经创建了 ApplicationSontaUserBundle,如果我使用 fosUserInterface 一切正常。但我有另一个用户 Bundle,例如名为 Sso。所以在我的应用程序中,我需要使用 Sso userManger 而不是 FosUserManager。奏鸣曲用户包包含一个“admin_orm.xml”,在这个服务配置文件中,我在文件中有这一行:(在奏鸣曲用户包中)

   <service id="sonata.user.admin.user" class="%sonata.user.admin.user.class%">
        <tag name="sonata.admin" manager_type="orm" label="users" label_catalogue="SonataUserBundle" label_translator_strategy="sonata.admin.label.strategy.underscore" />
        <argument />
        <argument>%sonata.user.admin.user.entity%</argument>
        <argument>%sonata.user.admin.user.controller%</argument>
        <call method="setUserManager">
            <argument type="service" id="fos_user.user_manager" />
        </call>
        <call method="setTranslationDomain">
            <argument>%sonata.user.admin.user.translation_domain%</argument>
        </call>
    </service>

在 Application/Sonata/UserBundle/Resources/config/admin_orm.xml 中,我有这个:

        <call method="setUserManager">
            <argument type="service" id="sso.user_manager" />
        </call>

因为我在 Application/Sonata/Admin/Model/UserAdmin.php 中定义了另一个 userAdmin

use xxx\SsoBundle\Entity\UserManager;
....
/**
 * @param UserManager $userManager
 */
public function setUserManager(UserManager $userManager)
{
    $this->userManager = $userManager;
}

而不是原来的 FosUserInterface。但是,它从不接受我的设置

 Application/Sonata/UserBundle/Resources/config/admin_orm.xml

它总是抱怨用户管理器是一个 FosUserInterface 对象,我需要自己的用户管理器。如果我改变

/vendor/sonata-project/user-bundle/Sonata/UserBundle/Resources/config/admin_orm.xml

并设置我自己的用户管理器,一切正常。谁能告诉我如何覆盖这个文件?

4

1 回答 1

2

好吧,2年后,我找到了解决方案。它是如此愚蠢。我需要定义dependencyInjection 类来加载xml 并加载服务。如果您不编写dependencyInjection 类,则不会加载子包的配置文件。就像普通的捆绑包一样。配置文件不能被“覆盖”,每个bundle的配置文件都是红色的,最后一个获胜。

于 2016-01-25T09:17:21.287 回答