Symfony 2 - 在一个实体上处理多个实体侦听器



假设我有一个实体Product,并且我的应用程序中有一个实体ListenerA(preUpdateprePersist(。

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(ListenerAListenerB(将被触发。

产品 编号: 1 标题:"某个标题" 属性1: 1 属性 2: 1 属性 3: 1 可见: 1

例如,业务规则是当实体被更改或更新时,如果属性 1、属性 2 和属性 3 为真,则产品的可见性必须设置为 true,否则将为 false。该规则是在实体侦听器上设置的。

因此,如果我更改例如property3= 0,那么visible现在必须false

但正如我所提到的,PHP 包上还有另一个侦听器ListenerB,它也跟踪该实体的更改。

问题是,当该PHP包上的ListenerB被触发时,它不会获得由ListenerA触发的Productvisible属性的更新更改(实现业务逻辑(。

例如,Productvisibility1,它被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 }

最新更新