actiane / entity-change-watch-bundle
Allows you to listen to the life cycle of your entities
Installs: 27 344
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 4
Forks: 3
Open Issues: 0
Type:symfony-bundle
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-11-05 19:21:59 UTC
README
This bundle allow to watch changes made on specific properties of entities using the doctrine2 life cycles events
INSTALLATION
Create a yaml file inside the packages directory
USAGE
Examples
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 */ }
Callbacks services definition
All callback services must be tagged with actiane.entitychangewatch.callback
Callbacks method
Please note that the orders of the arguments matter
The first argument is the entity The second argument $entityManager is the entityManager
A callback is called after the flush, you can not execute another flush in this method.
If you whish to add or modify entities, you need to set the flush parameter to false
- {name: 'MyEntityService', method: 'doSomethingBeforeFlush', flush: false}
If you create and persist a new entity in this callback, then calling EntityManager#persist() is not enough. You have to execute an additional call to $unitOfWork->computeChangeSet($classMetadata, $entity).
Changing primitive fields or associations requires you to explicitly trigger a re-computation of the changeset of the affected entity. This can be done by calling $unitOfWork->recomputeSingleEntityChangeSet($classMetadata, $entity).