Search code examples
phpsymfonysonata-adminsonata-user-bundle

Symfony 2.8 : Edit service config


I'm trying to edit or override the config (admin_orm.xml) of a service (sonata.user.admin.user) which is created by SonataUserBundle. I'd like to be able to use the entitymanager in that service. Because i need to edit edit on another entity after the creation of a new user on SonataAdminBundle (https://sonata-project.org/bundles/admin/2-3/doc/reference/saving_hooks.html).

The config file:

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


Solution

  • I found a way to fix my problem which is this line:

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

    it's probably not the cleanest way to fix the problem, but it works for me.