zicht/versioning-bundle

该包已被放弃,不再维护。没有建议替代包。

Zicht 版本控制


README

ZichtVersioningBundle 通过 Doctrine 集成,将版本保存在名为 EntityVersion 的独立实体中,跟踪更改,并能够回滚到和计划未来的版本。

实现说明

标记可版本化行为

要使实体可版本化,实体应实现 VersionableInterface 接口。对于所有 OneToMany 关系,关系必须标记为 cascade={...,"persist"},并且包含的实体必须实现 EmbeddedVersionableInterface

实体表中的当前版本数据称为 active 版本。通过设置另一个版本为活动状态,将版本表中的数据加载到实体中并持久化到数据库。这使得版本控制透明;即,其他组件不需要知道实体是版本化的,可以直接查询数据库,因为 active 版本始终在数据库表中。

有一个命令可以内省这些版本,这对于调试很有用。

克隆对象

如果您想要能够克隆对象,您需要 重置对象 id

public function __clone()
{
    $this->id = null;
}

否则,版本控制将混淆记录 id 引用。

Sonata 集成

由于版本化的嵌入实体不存在于数据库中,Sonata 使用 id(在路由中的 childId 参数)引用对象的方 法不适用。为此,提供了 EmbeddedVersionableAdminTrait 以覆盖 id()update()generateObjectUrl() 方法,因此使用 索引 而不是 id 来引用子对象。这些值是从父对象而不是从

您应该在管理实现 EmbeddedVersionableInterface 的实体的所有管理员中使用此 trait,例如

class ContentItemDetailAdmin extends Admin
{
    use EmbeddedVersionableAdminTrait;
}

维护者