jollyblume/marking-store

symfony/workflow 兼容的多租户标记存储

v1.0.0-rc0 2019-02-02 19:49 UTC

This package is auto-updated.

Last update: 2024-09-08 19:21:43 UTC


README

此组件为 symfony/workflow 提供了一个轻量级的、多租户的标记存储。
  • 实现了 symfony/workflowMarkingStoreInterface,作为 Workflow 和其标记存储之间的适配器。
  • 在主题上存储了一个 UUID,而不是主题的标记。
    • 用于访问主题的 uuid 的属性不得为 marking。此属性名由 symfony/workflow 保留。其使用将抛出异常。
  • 适配器通过中介与标记存储进行通信。
  • 适配器在需要时将 Marking 转换为 array-of-places(由中介和标记存储使用)。
  • 中介负责访问实际的标记存储。
  • 当前的中介将事件分发给标记存储以获取和设置 array-of-places
    • 此实现存在已知问题,其中适配器可以在不知道有标记存储监听的情况下获取或设置标记。任何设置的标记都不会持久化。
中介事件包括来自适配器的三个标识符。
  • 适配器的名称将成为 $storeName。
  • 主题的 UUID 将成为 $subjectUuid。
  • 用于在主题上存储 UUID 的属性将变为 $property。

InMemoryMarkings 标记存储在数组中持久化标记,其中标记的标识符形成键,"*array-of-places*" 形成值。

$storeName>/$subjectUuid>/$property = [place1, place2, ...]

中介向四个事件的活动监听者分派 MarkingStoreEvent

  • 在适配器的构建期间分派 workflow.store.created
  • 分派 workflow.places.get 以获取 array-of-places
  • 分派 workflow.places.setting 以设置 array-of-places
  • 在设置 array-of-places 后分派 workflow.places.set。监听者可以在此事件期间执行清理代码(例如,刷新 Doctrine 实体)。

通过 composer 安装

composer.phar require jollyblume/workflow:@dev