rezzza/workflow

Rezzza workflow

dev-master / 1.0.x-dev 2014-09-17 08:25 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:54:23 UTC


README

Build Status

轻松定义对象的流程。

安装

通过 Composer

$ composer require --dev "rezzza/workflow:1.0.*@dev"

警告:此库使用二进制系统,为每个状态分配二进制掩码。这种方式将限制状态的数量。

使用方法

use \Rezzza\Workflow\Graph;
use \Rezzza\Workflow\State;
use \Rezzza\Workflow\Workflow;
use \Rezzza\Workflow\Exception;

$graph = new Graph();
$graph
    ->addState('empty', new State\NextOne())                                     // can go to filled
    ->addState('filled', new State\StateCollection(array('empty', 'confirmed'))) // can go to empty or confirmed
    ->addState('confirmed', new State\NextOne())                                 // can go to pending transaction
    ->addState('pending_transaction', new State\NextAll())                       // can go to failing_transaction or success_transaction
    ->addState('failing_transaction', new State\End())
    ->addState('success_transaction', new State\End())

$cart     = new Acme\ECommerce\Path\To\Cart();
$workflow = new Workflow($graph, $cart, 'status');
$states   = $workflow->getAuthorizedStates();

try {
    $workflow->moveToState('filled');
} catch (Exception\ConflictException e) {
    // it seems you want to add a state already setted.
} catch (Exception\WorkflowException $e) {
    // you try to set a state not authorized.
}

规格说明

可以为每个状态添加规格说明。

use Rezzza\Workflow\Specification\SpecificationInterface;

class ConfirmableSpecification implements SpecificationInterface
{
    public function isSatisfiedBy($object)
    {
        return $object->hasUserAuthenticated();
    }
}

$graph = new Graph();
$graph
    //........
    ->addState('confirmed', new State\NextOne(new ConfirmableSpecification()))
    //.........

状态

可以使用这些状态中的每一个。