dsentker / watcher
允许使用易于使用的API跟踪 doctrine 实体的变化。
0.3.0
2023-10-06 12:57 UTC
Requires
- php: ^7.3 || ^8.0
- ext-mbstring: *
- doctrine/annotations: 1.*
- doctrine/orm: 2.14.*
- psr/log: ^1.0
Suggests
- monolog/monolog: Allows logging of changed entities
README
允许使用易于使用且高度可定制的API跟踪 doctrine 实体的变化。
文档
快速示例
您可以使用这个库来跟踪 doctrine 实体的变化。使用注解来定义要监视的字段。它们决定了更改要保存的位置。
// User Entity class /** * @Column(type="string") * @WatchedField // <-- Watcher now tracks changes related to this field */ protected string $emailAddress;
/** * @var $dbParams array * @var $config Configuration */ $em = EntityManager::create($dbParams, $config, Watcher::createEventManager(new DatabaseHandler())); Watcher::registerAnnotations(); /** @var $user User */ $user = $em->getRepository(User::class)->find(1); $user->setUsername("A new username"); $em->persist($user); $em->flush(); /** @var EntityLogRepository $logRepo */ $logRepo = $em->getRepository(EntityLog::class); /** @var EntityLog[] $changes */ $changes = $logRepo->getLogsFromEntity($user); $lastChange = $changes[0]; echo vsprintf("Last updated at (%s): Changed %s from '%s' to '%s'", [ $lastChange->getChangedAt()->format('Y-m-d'), $lastChange->getFieldLabel(), $lastChange->getOldValue(), $lastChange->getNewValue(), ]); // Last updated at 2017-09-07: Changed Email Address from 'foo@example.com' to 'foo42@example.com'
Symfony4 services.yaml 集成(示例)
watcher.db_handler: class: App\Utils\AppWatcherHandler #your handler, e.g. Database Handler autowire: true Watcher\EventListener\FlushListener: calls: - method: pushUpdateHandler arguments: - '@watcher.db_handler' - method: setAnnotationReader arguments: - '@annotations.reader' tags: - { name: doctrine.event_listener, event: onFlush } Watcher\EventListener\LoadListener: arguments: - 'App\Entity\EntityLog' # The entity which relates to EntityLogRepository tags: - { name: doctrine.event_listener, event: postLoad }
已知限制
- 此包能够跟踪单个字段和关联(集合)的变化,但依赖于 Doctrine 的概念,该概念仅限于跟踪拥有侧的字段变化。这意味着,不支持逆向关联(如
@OneToMany
)。@ManyToMany
和@ManyToOne
关联 是 支持的。 - 还要考虑开销。如果您选择了 DatabaseHandler,每个跟踪的实体更改会导致一个单独的数据库请求。
测试
TBD(支持受到欢迎!)
致谢
提交错误和功能请求
错误和功能请求在 GitHub 上跟踪。
待办事项
- 使用接口做所有事情
- 易于 Symfony 集成
- 编写测试
- 优化性能(分组更改?)
外部库
此库依赖于 Doctrine(惊喜!)和子包。
版权和许可
《Watcher》根据 MIT 许可证(MIT)授权使用。有关更多信息,请参阅 LICENSE。