Этот бандл позволяет использовать FSM для запуска списка задач в своем проекте на Symfony2.
Установка через 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.