【发布时间】:2018-01-31 19:41:12
【问题描述】:
我有一个 Symfony 3.4 应用程序和一个带有 EntityChangeListener 的 Composer 包来记录实体属性更改。该包还包含一个EntityListenerPass(编译器通行证),它在构建服务容器时迭代应用程序config.yml 中定义的类名列表。它以编程方式标记这样的实体类,以在 preUpdate 事件上通知侦听器:
$listener = $container->getDefinition('entity_history.listener.entity_change');
$entities = $container->getExtensionConfig('entity_history')[0]['entities'];
foreach ($entities as $className) {
$listener->addTag('doctrine.orm.entity_listener', ['entity' => $className, 'event' => 'preUpdate']);
}
添加这些标签会导致很多看似无关的错误。例如,实体状态的 Doctrine UnitOfWork 内部未定义索引错误。 Doctrine 也将突然从数据库加载的相关实体识别为 new。甚至switch 语句中的对象比较也开始失败:
致命错误:嵌套级别太深 - 递归依赖?
但如果没有这些侦听器,一切正常,所有测试都通过。是否有替代/更好的方式以编程方式设置 Doctrine 实体侦听器?
【问题讨论】:
-
你能给
EntityChangeListener的链接吗? -
对不起,我不明白你到底是什么链接。
-
EntityChangeListener这是一些捆绑包?因为我在 git 中没有找到这个 -
啊,那个监听器来自我自己正在开发的包。
-
非常酷。有没有打算在这个基础上做一个bandle
标签: php symfony doctrine-orm doctrine