Symfony 2.8: редактирование конфигурации службы

1

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

Файл конфигурации:

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

Теги:
sonata-admin
sonata-user-bundle

2 ответа

0
Лучший ответ

Я нашел способ исправить мою проблему, которая есть эта строка:

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

это, вероятно, не самый чистый способ устранить проблему, но она работает для меня.

0

Я думаю, что вы звучите, скопируйте сервис Определение и деактивируйте бокс-услугу fosuserbundle.

Чтобы исключить дублирование кода, вы можете перейти от первоначальной службы.

Определите записи меню в файле config.yml, чтобы исключить собственные службы администрирования.

  • 0
    Прежде всего, спасибо за ваше воспроизведение, и да, я уже пытался скопировать определение службы, но я получаю сообщения об ошибках типа: Не удается автоматически определить имя базового маршрута, пожалуйста, определите значение baseRouteName по умолчанию для класса администратора. Это может быть потому, что я должен деактивировать в штучной упаковке, но как я могу это сделать?
  • 0
    Я не знаю о такой функциональности, как отключение служб в Symfony из коробки. Но я думаю, что вы можете просто создать компилятор, чтобы перезаписать ваши определения контейнера. Посмотрите на этот пример: symfony.com/doc/current/components/dependency_injection/… определите, что проход компилятора в вашем ChildMediaBundle смотрите: symfony.com/doc/current/cookbook/service_container/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню