如何用户将不同的用户管理器注入奏鸣曲用户包

时间:2014-03-03 13:33:56

标签: symfony sonata-user-bundle

我尝试使用sonata admin bundle和sonata bundle。我创建了ApplicationSontaUserBundle,如果我使用fosUserInterface,一切正常。但我有另一个用户Bundle,例如Sso。所以在我的应用程序中,我需要使用Sso userManger而不是FosUserManager。 sonata用户包包含一个“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

并设置我自己的用户管理器,一切正常。任何人都可以告诉我如何覆盖此文件?

1 个答案:

答案 0 :(得分:1)

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