argens/finite

A simple PHP Finite State Machine

Package info

github.com/Arkadiy-Sedelnikov/Finite

Homepage

pkg:composer/argens/finite

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

dev-master / 1.3.x-dev 2024-09-03 17:23 UTC

Suggests

Provides

None

Conflicts

None

Replaces

None

MIT c427247f5a7849b77314ffc1af8d67e839d0344b

symfonystatebundleworkflowstatemachinetransition

This package is auto-updated.

Last update: 2026-05-29 02:06:01 UTC


README

Finite is a Simple State Machine, written in PHP. It can manage any Stateful object by defining states and transitions between these states.

👁 Build Status
👁 Latest Stable Version
👁 Total Downloads
👁 License
👁 Scrutinizer Code Quality
👁 Code Coverage
👁 SensioLabsInsight
👁 Dependency Status
👁 Reference Status
👁 Gitter

Features

  • Managing State/Transition graph for an object
  • Defining and retrieving properties for states
  • Event Listenable transitions
  • Symfony2 integration
  • Custom state graph loaders
  • Twig Extension

Documentation

Documentation for master (1.1)

Getting started

Installation (via composer)

{
 "require": {
 "yohang/finite": "~1.1"
 }
}

Version note :

If your are using this library in a Symfony project, 1.1 version is only compatible with Symfony >=2.6. 1.0 is compatible with Symfony >=2.3, <2.6.

Define your Stateful Object

Your stateful object just need to implement the StatefulInterface Interface.

use Finite\StatefulInterface;

class Document implements StatefulInterface
{
 private $state;
 public function setFiniteState($state)
 {
 $this->state = $state;
 }

 public function getFiniteState()
 {
 return $this->state;
 }
}

Initializing a simple StateMachine

use Finite\StateMachine\StateMachine;
use Finite\State\State;
use Finite\State\StateInterface;

// $document = retrieve your stateful object

$sm = new StateMachine();

// Define states
$sm->addState(new State('s1', StateInterface::TYPE_INITIAL));
$sm->addState('s2');
$sm->addState('s3');
$sm->addState(new State('s4', StateInterface::TYPE_FINAL));

// Define transitions
$sm->addTransition('t12', 's1', 's2');
$sm->addTransition('t23', 's2', 's3');
$sm->addTransition('t34', 's3', 's4');
$sm->addTransition('t42', 's4', 's2');

// Initialize
$sm->setObject($document);
$sm->initialize();

// Retrieve current state
$sm->getCurrentState();

// Can we process a transition ?
$sm->can('t34');