Symfony 2.8:编辑服务配置


Symfony 2.8 : Edit service config

我正试图编辑或覆盖由SonataUserBundle创建的服务(sonata.user.admin.user)的配置(admin_orm.xml)。我希望能够在该服务中使用实体管理器。因为在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>

我认为您复制了服务定义并停用了装箱的fosuserbundle服务。

要省略代码重复,您可以从原始服务扩展。

在config.yml中定义菜单项以排除本机管理服务。

我找到了一种解决问题的方法,这是一行:

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

这可能不是解决问题的最干净的方法,但对我来说很有效。