Symfony 2.8:编辑服务配置
Symfony 2.8 : Edit service config
我正在尝试编辑或覆盖由 SonataUserBundle 创建的服务 (sonata.user.admin.user) 的配置 (admin_orm.xml)。我希望能够在该服务中使用 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>
我认为您可以复制服务定义并停用盒装 fosuserbundle 服务。
要省略代码重复,您可以从原始服务进行扩展。
在 config.yml 中定义菜单条目以排除本机管理服务。
我找到了解决问题的方法,即这一行:
$em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager');
这可能不是解决问题的最干净的方法,但对我有用。
我正在尝试编辑或覆盖由 SonataUserBundle 创建的服务 (sonata.user.admin.user) 的配置 (admin_orm.xml)。我希望能够在该服务中使用 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>
我认为您可以复制服务定义并停用盒装 fosuserbundle 服务。
要省略代码重复,您可以从原始服务进行扩展。
在 config.yml 中定义菜单条目以排除本机管理服务。
我找到了解决问题的方法,即这一行:
$em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager');
这可能不是解决问题的最干净的方法,但对我有用。