假设我有一个实体Product
,并且我的应用程序中有一个实体ListenerA(preUpdate
,prePersist
(。
class ListenerA {
public function prePersist(LifecycleEventArgs $args)
{
...
}
public function prePersist(LifecycleEventArgs $args)
{
...
}
假设Product
实体有一个属性visible
(bool(,对于该实体的每次更新,visible
可能会根据某些逻辑更改 1 或 0。
同样在那个Symfony应用程序中,有一个来自私有仓库的PHP包。此包负责跟踪所有实体上的实体更改。它有一个跟踪所有实体的ListenerB
。它还使用与申请中使用的相同原则。onFlush
,此侦听器会将 chnage 推送到 AWS 流媒体服务中。
例如,我的问题是有一条记录将被更新。 当然,two listeners
(ListenerA
和ListenerB
(将被触发。
产品 编号: 1 标题:"某个标题" 属性1: 1 属性 2: 1 属性 3: 1 可见: 1
例如,业务规则是当实体被更改或更新时,如果属性 1、属性 2 和属性 3 为真,则产品的可见性必须设置为 true,否则将为 false。该规则是在实体侦听器上设置的。
因此,如果我更改例如property3
= 0,那么visible
现在必须false
。
但正如我所提到的,PHP 包上还有另一个侦听器ListenerB
,它也跟踪该实体的更改。
问题是,当该PHP包上的ListenerB
被触发时,它不会获得由ListenerA
触发的Product
visible
属性的更新更改(实现业务逻辑(。
例如,Product
的visibility
是1,它被ListenerB
推送到流,但后来ListenerA
出于某些逻辑将其更改为0。
推送到流的数据不是更新的值。
我需要跟踪ListenerA
上所做的最后更改,然后再将更改推送到ListenerB
。
很可能我对ListenerB
的访问权限有限.我有完全权限编辑ListenerA
上的代码。
您对此有什么建议或解决方法吗?
我将不胜感激任何帮助。
在定义侦听器时,通常可以指定priority
。
首先执行优先级最高的侦听器
services:
app.listener.a:
class: AcmeListenerAListener
tags:
- { name: doctrine.event_listener, event: postPersist, priority: 100 }
services:
app.listener.b:
class: AcmeListenerBListener
tags:
- { name: doctrine.event_listener, event: postPersist, priority: 50 }