sokil/php-state 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

sokil/php-state

最新稳定版本:0.5.3

Composer 安装命令:

composer require sokil/php-state

包简介

State machine

README 文档

README

Implementation of finite state machine on PHP.

Latest Stable Version Total Downloads Build Status Coverage Status

Installation

You can install library through Composer:

{
    "require": {
        "sokil/php-state": "dev-master"
    }
}

Basic Usage

<?php

// create state machine builder
$machineBuilder = new MachineBuilder();

// configure states
$machineBuilder
    ->addState(function(StateBuilder $builder) {
        $builder->setName('new');
    })
    ->addState(function(StateBuilder $builder) {
        $builder
            ->setName('in_progress')
            ->setMetadata([
                'label' => 'In progress'
            ]);
    })
    ->addState(function(StateBuilder $builder) {
        $builder->setName('done');
    });
    
// set initial state
$machineBuilder->setInitialState('new');

// configure transitions between states
$machineBuilder
    ->addTransition(function(TransitionBuilder $builder) {
        $builder
            ->setName('set_in_progress')
            ->setInitialStateName('new')
            ->setResultingStateName('in_progress')
            ->setAcceptCondition(function() {
                // conditions when accepted to transit from "new" state to "in_progress"
                return true;
            });
    })
    ->addTransition(function(TransitionBuilder $builder) {
        $builder
            ->setName('set_done')
            ->setInitialStateName('in_progress')
            ->setResultingStateName('done');
    });
    
// create machine
$machine = $machineBuilder->getMachine();

// process transition
$state = $machine->process('set_in_progress')->getCurrentState();

Configuration

Machine may be configured directly in code, as in sample above. But also it may be configured by using configuration in files of different formats. Currenly supported are YAML, JSON and php array files. Exaples of configs may be viewed here.

In common case structure of config is:

stateName1:
  initial: true
  transitions:
    transition1Name:
      resultingState: stateName2
    to_rejected:
      resultingState: stateName3

stateName2:
  transitions:
  ...
<?php

// YAML
$configuration = new YamlConfiguration('config.yaml');

// PHP Array
$configuration = new ArrayConfiguration('config.php');
// or
$configuration = new ArrayConfiguration([...state configuration...]);

// JSON
$configuration = new JsonConfiguration('config.json');

// Configure
$machineBuilder = new MachineBuilder();
$machine = $machineBuilder->configure($configuration)->getMachine();

By default, YamlConfiguration uses pecl extension, but if there is no possibility to install this extension on server, you can use Symfony's YAML component.

<?php
$configuration = new YamlConfiguration('config.yaml', ['pecl' => false]);

This also require you to add dependency on symfony/yaml to your composer.json.

统计信息

  • 总下载量: 316
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 4
  • 点击次数: 2
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

  • Stars: 4
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2015-08-07