https://github.com/jeyroik/extas-workflow-example
Example of usage workflow package for Extas
https://github.com/jeyroik/extas-workflow-example
example extas php workflow
Last synced: about 1 month ago
JSON representation
Example of usage workflow package for Extas
- Host: GitHub
- URL: https://github.com/jeyroik/extas-workflow-example
- Owner: jeyroik
- License: apache-2.0
- Created: 2019-10-25T06:59:53.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-03-18T08:49:14.000Z (about 6 years ago)
- Last Synced: 2025-06-25T13:53:20.012Z (9 months ago)
- Topics: example, extas, php, workflow
- Language: PHP
- Size: 26.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# extas-workflow-example
Пример использования пакета jeyroik/extas-workflow
# установка workflow
`# vednor/bin/extas i`
# запуск
`extas-workflow-example# php -S localhost:8080 -t src/public`
После этого на страничке `http://localhost:8080` вы должны увидеть следующее:
```text
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`.
## Решение задачи
- Для того, чтобы решить поставленную задачу, в контекст помещаем следующие данные:
```php
$context = new WorkflowEntityContext([
'name' => 'jeyroik',
'lang' => 'ru'
]);
```
- Далее, для всех переходов устанавливаем триггер по шаблону `trigger__transition_finished`.
- Кроме этого, на переход в статус `done` вешаем валидаторы по параметрам контекста и сущности по шаблонам `validator__context_params` и `validator__entity_params` соответственно.
- Для удовлетворения требования по поводу `success` и `operated` создадим плагин, который будет реагировать на перевод в состояние `done`.
- Для этого плагин должен реагировать на стадию `workflow.to.done`.
Всё вместе решает поставленную задачу, удовлетворяя всем требованиям.