对于上下文,我使用 Symfony 2.4 和 Doctrine 2.4。
我目前正在尝试在学说实体侦听器中移动一些逻辑。现在,我刚刚使用@EntityListeners
注解在我的实体上注册我的侦听器,因为它不需要外部依赖项。但是现在,我想通过 Symfony2 容器将服务注入到我的实体监听器中。由于此功能非常新,因此没有相关的文档解释它是否首先可行,其次,它是如何完成的。
谢谢!
对于上下文,我使用 Symfony 2.4 和 Doctrine 2.4。
我目前正在尝试在学说实体侦听器中移动一些逻辑。现在,我刚刚使用@EntityListeners
注解在我的实体上注册我的侦听器,因为它不需要外部依赖项。但是现在,我想通过 Symfony2 容器将服务注入到我的实体监听器中。由于此功能非常新,因此没有相关的文档解释它是否首先可行,其次,它是如何完成的。
谢谢!
这在 Doctrine 2.4 中是可能的,但需要您创建自己的 Entity Listener Resolver 类。
有关注册自定义解析器的详细信息,请参阅Doctrine 文档,该解析器将容器(或在我的情况下为 ServiceManager)作为构造函数参数。
我没有在 Symfony2 容器中尝试过,但我在 Zend Framework 2 的ServiceManager 模块中尝试过,其原理可能非常相似。
ZF2 的 DoctrineORMModule 通过使用 ServiceManager 调用 MyEntityListenerResolverFactory 从而将 ServiceManager 注入 MyEntityListenerResolver 使整个过程非常优雅。
请参阅实体侦听器上的 Symfony 文档,了解如何将实体侦听器注册为服务:
services:
user_listener:
class: \UserListener
tags:
- { name: doctrine.orm.entity_listener }
- { name: doctrine.orm.entity_listener, entity_manager: custom }