2016-05-07 6 views
1

Я пытаюсь изменить или переопределить конфигурацию (admin_orm.xml) службы (sonata.user.admin.user), которая создается SonataUserBundle. Я хотел бы иметь возможность использовать entitymanager в этой службе. Потому что мне нужно отредактировать редактирование на другом объекте после создания нового пользователя на SonataAdminBundle (https://sonata-project.org/bundles/admin/2-3/doc/reference/saving_hooks.html).Symfony 2.8: Edit service config

Конфигурационный файл:

<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 по умолчанию для класса admin .. Возможно, это связано с тем, что i должен деактивировать услугу в штучной упаковке, но как я могу это сделать? –

+0

Я не знаю о такой функции, как отключить службы в symfony из коробки. Но я думаю, вы можете просто создать компилятор, чтобы перезаписать определения контейнера. Посмотрите на этот пример: http://symfony.com/doc/current/components/dependency_injection/tags.html определите, что компилятор передается в вашем ChildMediaBundle: http://symfony.com/doc/current/cookbook/service_container /compiler_passes.html –

Смежные вопросы