Download the PHP package wundii/flowcrafter without Composer
On this page you can find all versions of the php package wundii/flowcrafter. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download wundii/flowcrafter
More information about wundii/flowcrafter
Files in wundii/flowcrafter
Package flowcrafter
Short Description PHP library for defining, executing, and monitoring message-driven workflows (state machines)
License MIT
Informations about the package flowcrafter
flowcrafter
PHP-Engine für message-driven Workflows — Geschäftsprozesse als typsichere State Machines in reinem PHP, mit synchroner, asynchroner und zeitgesteuerter Ausführung und lückenlosem Audit-Log.
Ein Workflow besteht aus typisierten Messages, die zwischen Steps fließen. Das Routing schreibt man nicht — es ergibt sich aus den Constructor-Signaturen der Steps: Welche Message ein Step im Constructor verlangt, bestimmt, wann er läuft. Daraus entsteht ein typsicherer DAG, der sich versionieren, ausführen und in Echtzeit überwachen lässt. Kein YAML, kein XML, keine Annotations.
Features
- Schema-as-Code — Workflows als PHP-Klassen, Routing direkt aus den Step-Constructors abgeleitet
- Drei Ausführungsmodi — synchron (
FlowRunner), asynchron über Queue (FlowObserver) und zeitgesteuert per Cron (FlowScheduler) - Read-Model-Projektionen — Handler reagieren asynchron auf einzelne Messages (
ProjectionWorker) - Pluggable Storage & Queue — MySQL, Redis, EventSourcingDB; Storage und Queue getrennt konfigurierbar, eigene Backends via
StorageInterface/QueueInterface - Lückenloses Audit-Log — jede Message, Exception und Statusänderung wird erfasst, Schemas via Hash versioniert
- Automatischer Retry & runOnce — pro Step konfigurierbare Wiederholungen;
runOnceverhindert doppelte Seiteneffekte bei Re-Runs - Partielle Re-Runs — einzelne Steps einer bestehenden Instanz erneut ausführen (
includeSteps) - Ephemere Flows —
#[FlowEphemeral]für kurzlebige Flows ohne dauerhafte Ablage - Observability — REST-API, Prometheus/OpenMetrics-Endpunkt und optionales Web-UI
- Developer Experience — Console Commands, storageless Testing, Mermaid-Diagramme und Claude-Code-Plugin
Installation
Quickstart
Schritt für Schritt: docs/getting-started.md.
Beispiel
Ein vollständiger Order-Flow in drei Bausteinen — Messages, Steps, Flow.
1. Messages
readonly Value-Objects. Drei Typen steuern das Routing: Init startet den
Flow, Data fließt zwischen Steps, Return beendet ihn.
Braucht der erste Step keinen externen Input, gibt es die mitgelieferte
Wundii\Flowcrafter\EmptyInitMessagestatt einer eigenen Init-Klasse.
2. Steps
Reine PHP-Klassen. Der Constructor-Typ entscheidet das Routing, der Rückgabetyp
den weiteren Verlauf: MessageData (Flow läuft weiter), MessageReturn (Flow
endet) oder bool (Leaf-Result, kein Weiterleiten).
3. Flow
Das Schema entsteht via FlowBuilder. Hier konsumieren CompleteOrderStep und
AuditStep dieselbe OrderValidated-Message — also laufen sie parallel.
Das passende Diagramm liefert vendor/bin/flowcrafter diagram:mermaid App\\OrderFlow:
Flows auslösen
Synchron — direkter Aufruf, Ergebnis sofort verfügbar:
Asynchron — Message in die Queue legen, ein FlowObserver-Worker führt sie aus:
Zeitgesteuert — Schedule-Klasse mit Cron-Ausdruck, automatisch vom FlowScheduler aus dem Composer-Classmap entdeckt:
Per REST-API geht es auch: POST /api/flow/flow-run (synchron) bzw.
POST /api/queue/enqueue (async) — siehe docs/api.md.
Weitere Funktionen
Step Retry
Steps können bei transienten Fehlern automatisch wiederholt werden — konfiguriert
pro Step über addStep(retries:, delay:). retries: 3 bedeutet ein Erstversuch
plus drei Wiederholungen; die Retry-Konfiguration fließt in den Schema-Hash ein.
Read-Model-Projektionen
Projection-Handler reagieren asynchron auf einzelne Messages eines Flows —
ideal für Read Models, Benachrichtigungen oder Side-Effects. Jede Methode wird
per #[FlowProjectionMessage] an einen Message-Source gebunden, die Klasse per
#[FlowProjection] an einen oder mehrere Flow-Typen. Handler werden automatisch
aus dem Composer-Classmap entdeckt und vom ProjectionWorker
(vendor/bin/flowcrafter projection:worker) abgearbeitet.
Die Zustellung ist at-least-once — Handler-Methoden müssen idempotent sein.
Wirft eine Methode, wird die Exception als ProjectionException protokolliert
und mit der nächsten Message weitergemacht; die Queue blockiert nicht.
Dependency Injection
Steps erhalten neben Messages auch externe Services per Constructor-Injection.
Registriert werden sie über eine DependencyRegistry (per
FlowcrafterConfig::setDependencyRegistry() bzw. im Konstruktor von FlowRunner,
FlowScheduler, FlowObserver, ProjectionWorker). Jede Registrierungsart ist eine
benannte Methode:
| Methode | Verhalten |
|---|---|
instance(object) |
Konkrete Instanz, gebunden an die eigene Klasse |
bind(string $id, object\|class) |
Interface-Binding: Objekt → synthetic + Alias; class-string → autowire + Alias |
autowire(class) |
Einzelklasse per Autowiring |
autowireNamespace(string) |
Alle instanziierbaren Klassen unter einem PSR-4-Namespace |
autowireDirectory(string) |
Alle instanziierbaren Klassen unter einem Verzeichnis |
factory(class, Closure, ?alias) |
Lazy: Closure erhält den PSR-11-Container und liefert den Service |
Testing
Storageless mit FlowTestCase — kein Docker nötig. Vollständiger Leitfaden:
docs/testing.md.
Web-UI
Das optionale Frontend FlowCrafter UI visualisiert Flows, Messages, Exceptions, Schedules und Queues in Echtzeit:
All versions of flowcrafter with dependencies
ext-pdo Version *
ext-pdo_sqlite Version *
dragonmantank/cron-expression Version ^3.6
ramsey/uuid Version ^4.9.3
symfony/config Version ^7.4.10 | ^8.1.4
symfony/console Version ^7.4.13 | ^8.1.4
symfony/dependency-injection Version ^7.4.13 | ^8.1.4
symfony/filesystem Version ^7.4.11 | ^8.1.2
symfony/finder Version ^7.4.8 | ^8.1.1
symfony/http-foundation Version ^7.4.13 | ^8.1.4
symfony/process Version ^7.4.13 | ^8.1.0
symfony/routing Version ^7.4.13 | ^8.1.2
wundii/data-mapper Version ^1.5.3