我对教义实体听者有一种非常奇怪的行为。我在symfony 4.4应用程序中设置了两个理论实体侦听器。
service.yaml中的配置如下所示:
services:
App\EntityListener\MyEntityListener:
tags:
- name: doctrine.orm.entity_listener
event: preUpdate
entity: App\Entity\MyEntity我有一个问题,就是实体侦听器在本地开发环境中工作得很好,但在生产中却不工作。我已经跟踪问题到symfony调试模式。如果symfony内核有debug=true,则按预期调用实体侦听器。如果将其设置为false,则由于某种原因,实体侦听器不会按原则附加到实体类元数据。我最初的猜测是缓存使用中的一个问题,但是如果清除缓存,问题仍然存在。而且,我没有任何客户端代码依赖于Kernel::isDebug()。
有没有人知道这个问题可能起源于哪里,并能在一个方向上暗示我如何解决这个问题呢?
发布于 2022-01-06 18:13:55
经过几个小时的搜索和调试,我找到了问题的根源。我在这个项目中使用多个实体管理器。虽然实体侦听器绑定到一个实体管理器,但理论的类元数据缓存不是。因此,当调试设置为true时,没有(真正的)缓存命中,类元数据总是新建的。这使得实体侦听器在需要时总是存在。但是,当使用缓存时,实体类元数据是在负责实体的每个实体管理器的上下文中构建的。但是它仍然被写入相同的缓存存储中。因此,如果第一个实体管理器在由另一个实体管理器管理的类中也有一组实体侦听器,则实体侦听器将在缓存条目中被删除,因为元数据条目将被覆盖。
要解决这个问题,需要更具体地说明哪些实体由哪个实体管理器管理。它还可能有助于将实体侦听器专门附加到正确的实体管理器。因为如果省略了这一点,实体侦听器只会附加到默认的实体管理器,而不会附加到任何其他的实体管理器,在这种情况下,可能会出现这里描述的行为。
https://stackoverflow.com/questions/70605641
复制相似问题