jeyroik / extas-workflow-example
There is no license information available for the latest version (1.0.0) of this package.
Example of usage workflow package for Extas
1.0.0
2020-03-13 12:27 UTC
Requires
README
Пример использования пакета jeyroik/extas-workflow
установка workflow
# vednor/bin/extas i
запуск
extas-workflow-example# php -S localhost:8080 -t src/public
После этого на страничке http://localhost:8080
вы должны увидеть следующее:
Current state = todo
Available actions (transitions):
get_in_work (change status to "in_work")
not_actual__from_todo (change status to "not_actual")
Run transition to "in_work":
Transition runtime data:
=====================
Привет мир
Entity new state is "in_work"
=====================
Transition result: success
Сбросить
Объяснение
- В рамках примера устанавливается 4 состояния:
todo
,in_work
,done
,not_actual
. - Для этих состояний устанавливаются следующие переходы:
get_in_work
,done
,not_actual
. - Также устаналивается несколько шаблонов для обработки переходов.
trigger__hello_world
- после перехода выводит сообщение "Hello world" на языке, установленным в контексте.trigger__transition_finished
- вывод сообщение, что сущность переведена в состояние с указанием названия нового состояния.validator__hello_jeyroik
- проверяет наличие в контексте параметраname
и его равенство строкеjeyroik
.validator__context_params
- проверяет наличие в контексте параметров, указанных в обработчике.validator__entity_params
- проверяет наличие в сущности, меняющей состояние, параметров, указанных в обработчике.
- Кроме этого устанавливается схема, содержащая все указанные ранее состояния и переходы.
- Для установленной схемы workflow сразу устанавливаются и конкретные триггеры и валидаторы.
Описание задачи, которую решает пример
- Имеется сущность
DemoEntity
в состоянииtodo
. - Необходимо прогнать данную сущность по всем переходам схемы.
- Требуется вывести на русском языке фразу "Привет мир".
- Требуется после каждой смены состояния вывести соответствующее сообщение.
- Требуется гаранитровать, что в переходы осуществляются с именем 'jeyroik'.
- Требуется гарантировать, что в контексте после перевода сущности в состояние done будет параметр
success
, равныйtrue
. - Требуется гарантировать, что в сущности после перевода сущности в состояние done будет параметр
operated
, равныйtrue
.
Решение задачи
- Для того, чтобы решить поставленную задачу, в контекст помещаем следующие данные:
$context = new WorkflowEntityContext([ 'name' => 'jeyroik', 'lang' => 'ru' ]);
- Далее, для всех переходов устанавливаем триггер по шаблону
trigger__transition_finished
. - Кроме этого, на переход в статус
done
вешаем валидаторы по параметрам контекста и сущности по шаблонамvalidator__context_params
иvalidator__entity_params
соответственно. - Для удовлетворения требования по поводу
success
иoperated
создадим плагин, который будет реагировать на перевод в состояниеdone
.- Для этого плагин должен реагировать на стадию
workflow.to.done
.
- Для этого плагин должен реагировать на стадию
Всё вместе решает поставленную задачу, удовлетворяя всем требованиям.