sbooker / workflow
FSM实现简单工作流
2.0.0
2023-06-14 07:18 UTC
Requires
- php: ^8.1
- php-ds/php-ds: ^1.2
Requires (Dev)
- ext-dom: *
- ext-xml: *
- ext-xmlwriter: *
- phpunit/phpunit: ^10.2
This package is auto-updated.
Last update: 2024-09-14 10:33:33 UTC
README
安装
pecl install ds composer require sbooker/workflow
使用
// Step 1. Create Status Enum use Sbooker\Workflow\Status; enum ConcreteStatus: string implements Status { use \Sbooker\Workflow\EnumTrait; case first = "first"; case second = "second"; } // Step 2. Define workflow use Sbooker\Workflow\Workflow; use Ds\Map; use Ds\Set; final class ConcreteWorkflow extends Workflow { public function __construct() { parent::__construct(ConcreteStatus::first); } protected function buildTransitionMap(): Map { $map = new Map(); $map->put(ConcreteStatus::first, new Set([ConcreteStatus::second])); return $map; } protected function getStatusClass(): string { return ConcreteStatus::class; } } // Step 3. Use workflow in your entity for state control class ConcreteEntity { // ... private ConcreteWorkflow $workflow; // ... public function __construct() { // ... $this->workflow = new ConcreteWorkflow(); // ... } public function doSecond(): void { // ... $this->workflow->transitTo(ConcreteStatus::second()); // ... } }
许可
查看LICENSE文件。