Popularity
6.8
Stable
Activity
0.0
Declining
1,296
59
186

Description

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

Code Quality Rank: L5
Programming language: PHP
License: MIT License
Tags: Architectural     Symfony     State     Bundle     Workflow     Statemachine     Transition    
Latest version: v1.1.2

Finite alternatives and similar libraries

Based on the "Architectural" category.
Alternatively, view Finite alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Finite or a related project?

Add another 'Architectural' Library

README

Finite, A Simple PHP Finite State Machine

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');


*Note that all licence references and agreements mentioned in the Finite README section above are relevant to that project's source code only.