• eingeführt in Symfony 3.2 • unterstützt Workflow Nets und State Machines • in Twig und das Full-Stack Framework integriert • Audit Logging Die Workflow Komponente
• Subject: Objekt, auf das ein Workflow angewandt wird • Place: Zustände, die ein Workflow annehmen kann • Transition: (benannter) Übergang zwischen zwei Places Terminologie
• Marking: Zustand/Zustände, in denen sich ein Workflow befindet • Marking Store: Mapping des Workflow Markings auf Properties des Subjects Terminologie
Twig-Integration {# Transition auf Anwendbarkeit testen #} {% if workflow_can(order, 'deliver', 'order_payment') %} Deliver {% endif %} {# alle anwendbaren Transitionen #} {% for t in workflow_transitions(order, 'order_payment') %}
• workflow.leave vor dem Verlassen eines Places • workflow.transition vor dem Anwenden einer Transition • workflow.enter vor dem Entern eines Places • workflow..announce. Announcement aktivierter Transitions Event-Kategorien
Die Event Klasse use Symfony\Component\EventDispatcher\Event as BaseEvent; class Event extends BaseEvent { // ... public function getMarking() { return $this->marking; } public function getSubject() { return $this->subject; } public function getTransition() { return $this->transition; } }
Neue Twig-Funktionen {# prüfen, ob ein Workflow in einem gewünschten Place ist #} {% if workflow_has_marked_place(order, 'paid', 'order_payment') %} bezahlt {% endif %} {# aktive Places ermitteln #} {{ workflow_marked_places(order, true, 'order_payment')|join(', ') }}
• neues Event: workflow.entered • nachdem ein Place aktiviert wurde • Abstufungen: o workflow.entered o workflow..entered o workflow. .entered. • neue Methode: getWorkflowName() Änderungen am Event-System
Benutzerdefinierte Support Strategien use Symfony\Component\Workflow\SupportStrategy\SupportStrategyInterface; class EconomySupportStrategy implements SupportStrategyInterface { public function supports(Workflow $workflow, $subject) { if (!$subject instanceof Article) { return false; } return $subject->getCategory() === Article::CATEGORY_ECONOMY; } }