actiane/ entity-change-watch-bundle
允许您监听实体生命周期
v2.5.0
2022-08-05 14:24 UTC
Requires
- php: >7.4
- ext-pdo_sqlite: *
- doctrine/doctrine-bundle: ^2.0
- doctrine/orm: ^2.7.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 auto-updated.
Last update: 2024-09-05 18:56:42 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是entityManager
回调在flush之后调用,您不能在此方法中执行另一个flush。
如果您想要添加或修改实体,需要将flush参数设置为false
- {name: 'MyEntityService', method: 'doSomethingBeforeFlush', flush: false}
如果您在此回调中创建并持久化新实体,那么仅调用EntityManager#persist()是不够的。您必须执行额外的调用$unitOfWork->computeChangeSet($classMetadata, $entity)
更改基本字段或关联需要您显式触发受影响实体的更改集的重新计算。这可以通过调用$unitOfWork->recomputeSingleEntityChangeSet($classMetadata, $entity)
来完成