gmorel/state-workflow-demo

安装: 14

依赖: 0

建议者: 0

安全: 0

星级: 2

关注者: 3

分支: 0

开放问题: 0

类型:项目

dev-master 2015-09-13 12:18 UTC

This package is not auto-updated.

Last update: 2024-09-18 09:45:04 UTC


README

Symfony 2

State Workflow Demo ===================

帮助您实现复杂且易于维护的工作流程。

关键词:状态设计模式,工作流,有限状态机,Symfony2

StateWorkflowBundle 的一个 演示 项目。

Demo Booking Workflow simple

上下文

一个 预订实体 首先是 不完整 的,然后是 等待付款,然后是 已付款,然后是 待删除已取消

状态声明

以下所有状态都是实现 BookingStateInterface

默认转换 - 已禁用

所有可用转换均定义在 BookingStateInterface

interface BookingStateInterface extends StateInterface
{
    public function setBookingAsWaitingForPayment(HasStateInterface $booking);
    public function setBookingAsPaid(HasStateInterface $booking);
    public function cancelBooking(HasStateInterface $booking);
    public function setBookingToBeDeleted(HasStateInterface $booking);
}

所有 状态 都是实现 AbstractBookingState。因此,由于以下原因,所有 转换 默认情况下都是禁用的:

throw $this->buildUnsupportedTransitionException(__METHOD__, $booking);

启用转换

BookingStateInterface转换 方法被重写时,转换被启用。

public function setBookingAsPaid(HasStateInterface $booking)
{
    $newState = $this->getStateFromStateId(StatePaid::KEY, __METHOD__, $booking);
    if ($newState) {
        $booking->changeState($this->getStateWorkflow(), $newState);

        // Implement necessary relevant transition here
    }

    return $newState;
}

在这些 转换 方法内部,您可以执行任何操作。由于每个状态都是一个服务,您可以 注入 您需要的任何内容。

  • 日志
  • 事件源
  • 断言
  • 发送邮件
  • 等..

示例

以下是使用 SpecGen 命令行 sf spec-gen:state-workflow:generate-specifications 生成的生成工作流规范。

Cytoscape 随机生成工作流布局。如果布局不合适,请刷新。不要犹豫,拖放。