actiane/entity-change-watch-bundle

允许您监听实体生命周期

安装数: 27,165

依赖者: 0

建议者: 0

安全性: 0

星标: 5

关注者: 4

分支: 3

开放问题: 0

类型:symfony-bundle

v2.5.0 2022-08-05 14:24 UTC

README

travis build Coverage Status Scrutinizer Code Quality

此扩展允许您使用doctrine2生命周期事件监听实体特定属性的变化

安装

在packages目录中创建一个yaml文件

使用方法

示例

entity_change_watch:
    classes:
        Entity\MyEntity:
            create:
                - {name: 'MyEntityService', method: 'doSomethingBeforeFlush', flush: false}
            delete:
                - {name: 'MyEntityService', method: 'doSomething'}
            update:
                all:
                    - {name: 'MyEntityService', method: 'doSomething'}
                properties:
                    property1:
                        - {name: 'MyEntityService', method: 'doSomething'}
                    property2:
                        - {name: 'MyEntityService', method: 'doSomethingElse'}
class MyEntityService
{
    public function doSomething(MyEntity $myEntity)
    {
        /*
        
        do something
        */
    }
    
    public function doSomethingBeforeFlush(MyEntity $myEntity)
    {
        /*
        
        do something before the flush
        */
    }
    
    public function doSomethingElse(MyEntity $myEntity, array $changedProperties, EntityManagerInterface $entityManager)
    {
        /*
        
        do something else
        */
    }

回调服务定义

所有回调服务必须带有actiane.entitychangewatch.callback标签

回调方法

请注意参数的顺序很重要

第一个参数是实体,第二个参数$entityManager是entityManager

回调在flush之后调用,您不能在此方法中执行另一个flush。

如果您想要添加或修改实体,需要将flush参数设置为false

 - {name: 'MyEntityService', method: 'doSomethingBeforeFlush', flush: false}

如果您在此回调中创建并持久化新实体,那么仅调用EntityManager#persist()是不够的。您必须执行额外的调用$unitOfWork->computeChangeSet($classMetadata, $entity)

更改基本字段或关联需要您显式触发受影响实体的更改集的重新计算。这可以通过调用$unitOfWork->recomputeSingleEntityChangeSet($classMetadata, $entity)来完成