SimpleTaskFSMBundle для Symfony2

Этот бандл позволяет использовать FSM для запуска списка задач в своем проекте на Symfony2.

GitHub

Установка через Composer - менеджер php пакетов

$ composer require evheniy/simple-task-fsm-bundle "1.*"

Или добавить в composer.json:

"evheniy/simple-task-fsm-bundle": "1.*"

AppKernel:

public function registerBundles()
    {
        $bundles = array(
            ...
            new Evheniy\SimpleTaskFSMBundle\SimpleTaskFSMBundle(),
        );
        ...

Документация

Для использования бандла нужно создать классы (состояния) для описания задач.

Например AppBundle/FSM/StateInit:

<?php
    
namespace AppBundle/FSM;
    
use Evheniy\SimpleTaskFSMBundle\StateAbstract;
   
class StateInit extends StateAbstract
{
    
    /**
     * @throw \Evheniy\SimpleTaskFSMBundle\Exception\StateException
     */
    public function run()
    {
        //do something...
    }
}

После этого создайте FSM менеджер с массивом этих задач (например в Command):

use Evheniy\SimpleTaskFSMBundle\FSM;

И

 $fsm = new FSM(array(new StateInit()));
 foreach($fsm as $state) {
     $state->run();
 }

Или

 $fsm = new FSM(array(new StateInit()));
 $fsm->rewind();
 while($fsm->valid()) {
     $fsm->current()->run();
     $fsm->next();
 }

Если задача может бросать исключение (можно использовать Evheniy\SimpleTaskFSMBundle\Exception\StateException) и Вам нужно перезапускать шаг:

 $fsm = new FSM(array(new StateWithError()));
 
 $fsm->rewind();
 while($fsm->valid()) {
     try {
         $fsm->current()->run();// function run() throws StateException
         $fsm->next();
     } catch (StateException $e) {
         //do something
     }
 }

Можно использовать множество задач и они будут выполняться одна за другой:

$fsm = new FSM(array(new StateInit(), new StateMainTask(), new StateFinish()));

Лицензия

Этот бандл использует лицензию MIT.

Теги: Simpletaskfsmbundle, Simple, Symfony2, Fsm, Finite-state machine, Bundle


Похожие статьи

RobotsTxtBundle для Symfony2

MaterializeBundle для Symfony2

TwitterBootstrapBundle для Symfony2

JqueryBundle для Symfony2

HTML5VertiTemplateBundle для Symfony2

HTML5CacheBundle для Symfony2

GtmBundle (Google Tag Manager) для Symfony2

SitemapXmlBundle для Symfony2

SimplePaginationBundle для Symfony2