kerwanp / entity-change-watch-bundle
允许您监听您实体的生命周期
dev-master
2024-07-09 15:08 UTC
Requires
- php: ^8.1
- doctrine/doctrine-bundle: ^2.0
- doctrine/orm: ^2.7.0|^3.0
- symfony/framework-bundle: ^4.1|^5.1|^6.0
- symfony/property-access: ^4.1|^5.1|^6.0
Requires (Dev)
- doctrine/annotations: ^1.3
- php-coveralls/php-coveralls: ^2.4.3
- phpunit/phpunit: ^9.5.8
- symfony/yaml: ^5.0|^6.0
This package is not auto-updated.
Last update: 2024-10-02 14:34:54 UTC
README
此包允许使用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).
来完成。