This little library will help you to monitor changes on Doctrine insertions and/or updates, for specific classes, for specific properties.
use App\Entity\User;
use BenTools\DoctrineWatcher\Changeset\PropertyChangeset;
use BenTools\DoctrineWatcher\Watcher\DoctrineWatcher;
/**
* Instanciate watcher
*/
$watcher = new DoctrineWatcher();
/**
* Register it as an event subscriber
* @var \Doctrine\Common\EventManager $eventManager
*/
$eventManager->addEventSubscriber($watcher);
/**
* Watch for changes on the $email property for the User class
*/
$watcher->watch(User::class, 'email', function (
PropertyChangeset $changeset,
string $operationType,
User $user
) {
if (!$changeset->hasChanges()) {
return;
}
vprintf('Changed email from %s to %s for user %s' . PHP_EOL, [
$changeset->getOldValue(),
$changeset->getNewValue(),
$user->getName(),
]);
});
/**
* Watch for changes on the $roles property for the User class
*/
$watcher->watch(User::class, 'roles', function (
PropertyChangeset $changeset,
string $operationType,
User $user
) {
if ($changeset::INSERT === $operationType) {
return;
}
if ($changeset->hasAdditions()) {
vprintf('Roles %s were granted for user %s' . PHP_EOL, [
implode(', ', $changeset->getAdditions()),
$user->getName(),
]);
}
if ($changeset->hasRemovals()) {
vprintf('Roles %s were revoked for user %s' . PHP_EOL, [
implode(', ', $changeset->getRemovals()),
$user->getName(),
]);
}
});
PHP7.1+ is required.
composer require bentools/doctrine-watcher:0.2.*
./vendor/bin/phpunit
$watcher = new DoctrineWatcher(['trigger_on_persist' => true]); // Will be default config for all watchers
or
$watcher->watch(Entity::class, 'property', $callable, ['trigger_on_persist' => true]); // Will apply on this watcher only
$watcher = new DoctrineWatcher(['trigger_when_no_changes' => true]); // Will be default config
or
$watcher->watch(Entity::class, 'property', $callable, ['trigger_when_no_changes' => true]); // Will apply on this watcher only
On postPersist
and postUpdate
events.
MIT
bentools/doctrine-watcher-bundle - A Symfony Bundle for this library