kerwanp/entity-change-watch-bundle

允许您监听您实体的生命周期

安装: 1

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 3

类型:symfony-bundle

dev-master 2024-07-09 15:08 UTC

This package is not auto-updated.

Last update: 2024-10-02 14:34:54 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 是实体管理器

回调在flush之后被调用,你无法在这个方法中执行另一个flush。

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

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

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

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