gmorel / state-workflow-demo
dev-master
2015-09-13 12:18 UTC
Requires
- php: >=5.3.3
- doctrine/dbal: <2.5
- doctrine/doctrine-bundle: ~1.2
- doctrine/orm: ~2.2,>=2.2.3,<2.5
- gmorel/state-workflow-bundle: dev-master
- incenteev/composer-parameter-handler: ~2.0
- sensio/distribution-bundle: ~3.0,>=3.0.12
- sensio/framework-extra-bundle: ~3.0,>=3.0.2
- spec-gen/state-workflow-spec-gen-bundle: dev-master
- symfony/assetic-bundle: ~2.3
- symfony/monolog-bundle: ~2.4
- symfony/swiftmailer-bundle: ~2.3
- symfony/symfony: 2.6.*
- twig/extensions: ~1.0
Requires (Dev)
- phpunit/phpunit: ~4
- sensio/generator-bundle: ~2.3
This package is not auto-updated.
Last update: 2024-09-18 09:45:04 UTC
README
State Workflow Demo ===================帮助您实现复杂且易于维护的工作流程。
关键词:状态设计模式,工作流,有限状态机,Symfony2
是 StateWorkflowBundle 的一个 演示
项目。
上下文
一个 预订实体 首先是 不完整
的,然后是 等待付款
,然后是 已付款
,然后是 待删除
或 已取消
。
- 状态: BookingStateInterface 实例
- 转换: BookingStateInterface 方法
状态声明
以下所有状态都是实现 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 随机生成工作流布局。如果布局不合适,请刷新。不要犹豫,拖放。