stuki/workspace

Doctrine 2 工作空间

安装: 24

依赖项: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 1

开放问题: 0

类型:zf-module

dev-master 2013-11-15 20:07 UTC

This package is auto-updated.

Last update: 2024-09-11 14:05:58 UTC


README

Build Status

这是一个 Doctrine 2 的工作空间模块。此模块为每个用户创建一个实体,指定工作空间的目标,以便用户在自己的工作空间内工作。用户可以从任何修订版请求将工作空间合并到主分支。

关于

此模块接受工作空间中要包含的实体配置,并创建实体以将它们放入工作空间。放入工作空间的实体成为每个用户的个人工作空间。随着用户创建、更新和删除数据,这些更改将记录在他们的工作空间中。用户可以请求将他们的工作空间合并到主分支。合并请求由特权用户处理。随着修订版的批准,它们将合并到主数据库中。

这是通过评估在从 ORM 获取每个实体时完成的。实体将更改为当前用户在其工作空间内的最新修订版。

安装

使用 composer 需要工作空间

php composer.phar require "stuki/workspace": "dev-master"

config/application.config.php 中启用工作空间

return array(
    'modules' => array(
        'Workspace'
        ...
    ),

config/workspace.global.php.dist 复制到 config/autoload/workspace.global.php 并编辑设置

return array(
    'workspace' => array(
        'datetimeFormat' => 'r',
        'paginatorLimit' => 20,

        'tableNamePrefix' => '',
        'tableNameSuffix' => '_workspace',
        'revisionTableName' => 'Revision',
        'revisionEntityTableName' => 'RevisionEntity',

        'entities' => array(           
            'Db\Entity\Song' => array(),
            'Db\Entity\Performer' => array(),
        ),
    ),
);

使用 Doctrine 命令行工具更新数据库并创建工作空间表

vendor/bin/doctrine-module orm:schema-tool:update

术语

WorkspaceEntity - 一个生成的实体,它映射到可工作空间的 Target 实体。此存储在创建修订版时 Target 实体的值。

Revision - 一个存储时间戳、注释和用户的实体,它包含一个包含可工作空间实体的单个实体管理器刷新。

RevisionEntity - 一个映射实体,它将 WorkspaceEntity 映射到修订版并将其映射到 Target 工作空间实体。此实体可以重新激活 Target 实体和 WorkspaceEntity。此实体还存储在 Target 工作空间时修订版类型。INS、UPD 和 DEL 分别映射到插入、更新和删除。Target 的主键存储为数组,可用于重新激活 Target。

Target 实体 - 在工作空间配置中指定为字符串的可工作空间实体。

身份验证

您可以为映射修订版到用户的用户实体配置一个自定义实体。您也可以配置自定义身份验证服务。默认情况下,这些映射到 ZfcUserDoctrineORM\Entity\User 和 zfcuser_auth_service。例如,要使用自定义实体和服务 Db\Entity\User 以及 Zend\Authentication\AuthenticationService,可以这样操作。

用户实体必须实现 getDisplayName、getId 和 getEmail。身份验证服务必须实现 hasIdentity 和 getIdentity,它返回当前用户实体的一个实例。

接口未使用,因此可以直接使用 ZfcUser。

路由

要将路由映射到工作空间实体,请在工作空间 => 实体配置中包含路由信息

    'Db\Entity\Song' => array(
        'route' => 'default',
        'defaults' => array(
            'controller' => 'song',
            'action' => 'detail',
        ),
    ),

工作空间实体中的标识符列值将添加到默认值中,通过路由生成 URL。

    <?php
        $options = $this->workspaceEntityOptions($revisionEntity->getTargetEntityClass());
        $routeOptions = array_merge($options['defaults'], $revisionEntity->getEntityKeys());
    ?>
    <a class="btn btn-info" href="<?=
        $this->url($options['route'], $routeOptions);
    ?>">Data</a>

这是从您的应用程序映射到其当前修订版实体的方法

    <a class="btn btn-info" href="<?=
        $this->url('workspace/revision-entity',
            array(
                'revisionEntityId' => $this->workspaceCurrentRevisionEntity($workspaceedEntity)->getId()
            )
        );
    ?>">
        <i class="icon-globe"></i>
    </a>

视图助手

返回工作空间服务。这是一个辅助类。该类也可以通过依赖注入工厂 workspaceService 获取。此类提供以下功能

  1. setComment(); 设置下一次工作空间事务的注释。当设置注释时,它将在创建工作空间修订版时读取并添加为注释。

  2. getWorkspaceEntityValues($workspaceEntity); 返回给定工作空间实体的所有字段及其值。不包括多对多关系。

  3. getEntityIdentifierValues($entity); 返回实体的所有标识键及其值。

  4. getRevisionEntities($entity) 返回给定工作空间实体或修订实体所有的修订实体。

$view->workspaceService();
```

Return the latest revision entity for the given entity.
```
$view->workspaceCurrentRevisionEntity($entity);
```

Return a paginator for all revisions of the specified class name.
```
$view->workspaceEntityPaginator($page, $entityClassName);
```

Return a paginator for all RevisionEntity entities for the given entity or 
a paginator attached to every RevisionEntity for the given workspaceed entity class.Pass an entity or a class name string.
```
$view->workspaceRevisionEntityPaginator($page, $entity);
```

Return a paginator for all Revision entities.
```
$view->workspaceRevisionPaginator($page);
```

Returns the routing information for an entity by class name
```
$view->workspaceEntityOptions($entityClassName);
```

Titling
-------

If an entity has a __toString method it will be used to title an workspace entity limited to 256 characters and stored in the RevisionEntity.


Inspired by SimpleThings