Мне интересно, есть ли в 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').
Мой вопрос:
Как отслеживать все состояния и переходы в моем приложении? Сохраняю ли я состояния в моей модели предложения? Создавать ли дополнительные таблицы?