simplethings / entity-audit
Doctrine 实体审计
Requires
- php: ^7.1
- doctrine/dbal: ~2.5
- doctrine/orm: ~2.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.3
- gedmo/doctrine-extensions: ^2.3.1
- phpunit/phpunit: ^5.5
- symfony/var-dumper: ~2.8|~3.0
Conflicts
- gedmo/doctrine-extensions: <2.3.1
This package is auto-updated.
Last update: 2024-09-11 02:26:32 UTC
README
本扩展程序基于 Doctrine 2,灵感来源于 Hibernate Envers,允许对实体及其关联进行完整版本控制。
它是如何工作的?
关于数据库表的审计或版本控制有多种不同的方法。此扩展为每个审计实体的表创建一个镜像表,表名以 "_audit" 结尾。除了审计实体的所有列外,还有两个附加字段:
- rev - 包含由 "revisions" 表生成的全局修订号。
- revtype - 包含 'INS'、'UPD' 或 'DEL' 之一,作为此修订日志条目是由哪种数据库操作类型引起的信息。
全局修订表包含 id、时间戳、用户名和更改注释字段。
使用这种方法,可以在特定时间点对应用程序及其对关联的更改进行版本控制。
此扩展程序挂钩到 SchemaTool 生成过程,以便它将自动为您要审计的实体创建必要的 DDL 语句。
安装
### 安装 lib/bundle
假设您已安装 composer.phar 或 composer 二进制文件,请运行
$ composer require simplethings/entity-audit
对于独立使用,您必须传递 EntityManager。
use Doctrine\ORM\EntityManager; use SimpleThings\EntityAudit\AuditManager; $config = new \Doctrine\ORM\Configuration(); // $config ... $conn = array(); $em = EntityManager::create($conn, $config, $evm); $auditManager = AuditManager::create($em);
用法
定义可审计实体
您需要为想要可审计的实体添加 Auditable
注解。
use Doctrine\ORM\Mapping as ORM; use SimpleThings\EntityAudit\Mapping\Annotation as Audit; /** * @ORM\Entity() * @Audit\Auditable() */ class Page { //... }
您还可以忽略特定实体中的字段。
class Page { /** * @ORM\Column(type="string") * @Audit\Ignore() */ private $ignoreMe; }
使用 AuditReader
查询审计信息是通过使用 SimpleThings\EntityAudit\AuditReader
实例来完成的。
您可以从审计管理器创建审计读取器
$auditReader = $auditManager->createAuditReader();
在特定修订版中查找实体状态
此命令还会返回给定修订版中实体状态的当前状态,即使该实体在给定修订版之前的修订版中进行过最后一次更改
$articleAudit = $auditReader->find( SimpleThings\EntityAudit\Tests\ArticleAudit::class, $id = 1, $rev = 10 );
通过 AuditReader#find()
创建的实例 不会 注入到 EntityManagers UnitOfWork 中,如果需要将它们重新附加到旧的持久性上下文,则需要将它们合并到 EntityManager 中。
查找审计实体的修订历史
$revisions = $auditReader->findRevisions( SimpleThings\EntityAudit\Tests\ArticleAudit::class, $id = 1 );
修订版具有以下 API
class Revision { public function getRev(); public function getTimestamp(); public function getUsername(); }
在特定修订版中查找已更改的实体
$changedEntities = $auditReader->findEntitiesChangedAtRevision(10);
已更改实体的 API
class ChangedEntity { public function getClassName(); public function getId(); public function getRevisionType(); public function getEntity(); }
查找审计实体的当前修订版
$revision = $auditReader->getCurrentRevision( 'SimpleThings\EntityAudit\Tests\ArticleAudit', $id = 3 );
设置当前用户名
每个修订版都会自动保存更改它的用户名。为此,必须解析用户名。
您可以使用 AuditConfiguration
将用户名可调用项设置为特定值。
$auditConfig = new \SimpleThings\EntityAudit\AuditConfiguration(); $auditConfig->setUsernameCallable(function () { $username = //your customer logic return username; });
支持的数据库
- MySQL / MariaDB
- PostgreSQL
- SQLite
我们只能在可以通过 Travis 测试的情况下真正支持这些数据库。
贡献
在提交之前,请运行此命令 ./vendor/bin/php-cs-fixer fix --verbose
以标准化编码风格。
如果您已经在本地拥有修复程序,可以运行 php-cs-fixer fix .
。