Этот бандл позволяет использовать 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.