{"id":45761862,"url":"https://github.com/jeyroik/extas-workflow-example","last_synced_at":"2026-02-25T23:18:46.425Z","repository":{"id":56998583,"uuid":"217471289","full_name":"jeyroik/extas-workflow-example","owner":"jeyroik","description":"Example of usage workflow package for Extas","archived":false,"fork":false,"pushed_at":"2020-03-18T08:49:14.000Z","size":27,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-25T13:53:20.012Z","etag":null,"topics":["example","extas","php","workflow"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeyroik.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-25T06:59:53.000Z","updated_at":"2020-03-18T08:49:17.000Z","dependencies_parsed_at":"2022-08-21T14:10:31.335Z","dependency_job_id":null,"html_url":"https://github.com/jeyroik/extas-workflow-example","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/jeyroik/extas-workflow-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeyroik%2Fextas-workflow-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeyroik%2Fextas-workflow-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeyroik%2Fextas-workflow-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeyroik%2Fextas-workflow-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeyroik","download_url":"https://codeload.github.com/jeyroik/extas-workflow-example/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeyroik%2Fextas-workflow-example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29844849,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T22:37:40.667Z","status":"ssl_error","status_checked_at":"2026-02-25T22:37:25.960Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["example","extas","php","workflow"],"created_at":"2026-02-25T23:18:45.853Z","updated_at":"2026-02-25T23:18:46.418Z","avatar_url":"https://github.com/jeyroik.png","language":"PHP","readme":"# extas-workflow-example\n\nПример использования пакета jeyroik/extas-workflow\n\n# установка workflow\n\n`# vednor/bin/extas i`\n\n# запуск\n\n`extas-workflow-example# php -S localhost:8080 -t src/public`\n\nПосле этого на страничке `http://localhost:8080` вы должны увидеть следующее:\n\n```text\nCurrent state = todo\nAvailable actions (transitions):\n get_in_work (change status to \"in_work\")\n not_actual__from_todo (change status to \"not_actual\")\n\nRun transition to \"in_work\":\nTransition runtime data:\n=====================\nПривет мир\nEntity new state is \"in_work\"\n\n=====================\nTransition result: success\nСбросить\n```\n\n# Объяснение\n\n- В рамках примера устанавливается 4 состояния: `todo`, `in_work`, `done`, `not_actual`.\n- Для этих состояний устанавливаются следующие переходы: `get_in_work`, `done`, `not_actual`.\n- Также устаналивается несколько шаблонов для обработки переходов.\n  - `trigger__hello_world` - после перехода выводит сообщение \"Hello world\" на языке, установленным в контексте.\n  - `trigger__transition_finished` - вывод сообщение, что сущность переведена в состояние с указанием названия нового состояния.\n  - `validator__hello_jeyroik` - проверяет наличие в контексте параметра `name` и его равенство строке `jeyroik`.\n  - `validator__context_params` - проверяет наличие в контексте параметров, указанных в обработчике.\n  - `validator__entity_params` - проверяет наличие в сущности, меняющей состояние, параметров, указанных в обработчике.\n- Кроме этого устанавливается схема, содержащая все указанные ранее состояния и переходы.\n- Для установленной схемы workflow сразу устанавливаются и конкретные триггеры и валидаторы.\n\n## Описание задачи, которую решает пример\n\n- Имеется сущность `DemoEntity` в состоянии `todo`.\n- Необходимо прогнать данную сущность по всем переходам схемы.\n- Требуется вывести на русском языке фразу \"Привет мир\".\n- Требуется после каждой смены состояния вывести соответствующее сообщение.\n- Требуется гаранитровать, что в переходы осуществляются с именем 'jeyroik'.\n- Требуется гарантировать, что в контексте после перевода сущности в состояние done будет параметр `success`, равный `true`.\n- Требуется гарантировать, что в сущности после перевода сущности в состояние done будет параметр `operated`, равный `true`.\n\n## Решение задачи\n\n- Для того, чтобы решить поставленную задачу, в контекст помещаем следующие данные:\n ```php\n$context = new WorkflowEntityContext([\n    'name' =\u003e 'jeyroik',\n    'lang' =\u003e 'ru'\n]);\n```\n\n- Далее, для всех переходов устанавливаем триггер по шаблону `trigger__transition_finished`.\n- Кроме этого, на переход в статус `done` вешаем валидаторы по параметрам контекста и сущности по шаблонам `validator__context_params` и `validator__entity_params` соответственно.\n- Для удовлетворения требования по поводу `success` и `operated` создадим плагин, который будет реагировать на перевод в состояние `done`. \n  - Для этого плагин должен реагировать на стадию `workflow.to.done`.\n  \nВсё вместе решает поставленную задачу, удовлетворяя всем требованиям.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeyroik%2Fextas-workflow-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeyroik%2Fextas-workflow-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeyroik%2Fextas-workflow-example/lists"}