Конечный автомат и постоянство в Laravel

Мне интересно, есть ли в Laravel встроенный механизм конечного автомата? А если нет, то как лучше всего использовать эту замечательную библиотеку под названием Finite (https://github.com/yohang/Finite ).

Вот что у меня есть (вариант использования: доска объявлений):

  • Пользователь создает предложение (начальное состояние: создано)
  • Пользователь просматривает предложение (состояние: черновик)
  • Пользователь опубликовал предложение (конечное состояние: опубликовано)

Для начала я сделал свою модель «с сохранением состояния»:

use Finite\StatefulInterface;
class Offer extends Eloquent implements StatefulInterface {

Затем в моем действии контроллера предложений:

$stateMachine = new StateMachine();
$stateMachine->addState(new State('created', StateInterface::TYPE_INITIAL));
$stateMachine->addState('draft');
$stateMachine->addState(new State('published', StateInterface::TYPE_FINAL));

$stateMachine->addTransition('preview', 'created', 'draft');
$stateMachine->addTransition('publish', 'draft', 'published');

$stateMachine->setObject($offer);
$stateMachine->initialize();

Насколько я понимаю, когда пользователь просматривает предложение (например), я должен звонить:

$stateMachine->apply('preview').

Мой вопрос:

Как отслеживать все состояния и переходы в моем приложении? Сохраняю ли я состояния в моей модели предложения? Создавать ли дополнительные таблицы?


person Ahmed Chergaoui    schedule 07.04.2014    source источник
comment
Пожалуйста, поделитесь своими выводами! :-)   -  person menjaraz    schedule 08.07.2014
comment
Как запустить конечный автомат с нормальным состоянием? github.com/yohang/Finite/issues/114   -  person Somnath Muluk    schedule 11.04.2016


Ответы (1)


Перейдите к этому gist: черта FiniteAuditTrail: такая хорошая отправная точка для вашего запроса!

Интересующие файлы PHP:

person menjaraz    schedule 04.05.2014