2016-05-07 58 views
1

我試圖編輯或覆蓋由SonataUserBundle創建的服務(sonata.user.admin.user)的config(admin_orm.xml)。我希望能夠使用該服務中的entitymanager。因爲我需要在SonataAdminBundle(https://sonata-project.org/bundles/admin/2-3/doc/reference/saving_hooks.html)上創建新用戶之後編輯另一個實體上的編輯。Symfony 2.8:編輯服務配置

配置文件:

<parameters> 
    <parameter key="sonata.user.admin.groupname">sonata_user</parameter> 
</parameters> 

<services> 
    <service id="sonata.user.admin.user" class="%sonata.user.admin.user.class%"> 
     <tag name="sonata.admin" manager_type="orm" group="%sonata.user.admin.groupname%" 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> 

    <service id="sonata.user.admin.group" class="%sonata.user.admin.group.class%"> 
     <tag name="sonata.admin" manager_type="orm" group="%sonata.user.admin.groupname%" label="groups" label_catalogue="SonataUserBundle" label_translator_strategy="sonata.admin.label.strategy.underscore" /> 
     <argument /> 
     <argument>%sonata.user.admin.group.entity%</argument> 
     <argument>%sonata.user.admin.group.controller%</argument> 
     <call method="setTranslationDomain"> 
      <argument>%sonata.user.admin.group.translation_domain%</argument> 
     </call> 
    </service> 
</services> 

回答

0

我找到了一種方法來解決我的問題,這是這一行:

$em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager'); 

它可能不修復該問題最徹底的方法,但它爲我工作。

0

我覺得你的聲音複製服務定義和停用盒裝fosuserbundle服務。

忽略您可以從原始服務擴展的代碼重複。

定義config.yml中的菜單條目以排除本機管理服務。

+0

首先感謝您的重播和是的,我已經嘗試複製服務定義,但我得到一個錯誤,如:無法自動確定基本路由名稱,請爲管理類定義一個默認的baseRouteName值..也許是因爲我必須取消激活盒裝服務,但我該怎麼做? –

+0

我不知道像在開箱即用的symfony中禁用服務的功能。但我認爲你可以簡單地創建一個編譯器密碼來覆蓋你的容器定義。看看這個例子:http://symfony.com/doc/current/components/dependency_injection/tags.html 定義編譯器在您的ChildMediaBundle中傳遞請參閱:http://symfony.com/doc/current/cookbook/service_container /compiler_passes.html –