Ce qui se passe
Le composant Workflow de Symfony modélise le cycle de vie d'un objet en workflow ou en machine à états. On le définissait jusqu'ici en YAML ou en PHP, dans un fichier de configuration. Symfony 8.2 le déclare par attributs PHP, avec ses transitions et ses écouteurs (contribution de Grégoire Pineau). C'est une nouveauté de la 8.2, absente de la 8.1.9 publiée le même jour.
Comment ça se déclare
#[AsWorkflow]se pose sur une classe de service autoconfigurée.#[Transition]se pose sur une constante dont la valeur est le nom de la transition.- Le workflow prend le nom de la classe sans le suffixe
Workflow: c'est une machine à états par défaut, ettype: WorkflowType::Workflowdonne un workflow. - Les places sont déduites des transitions : la première est la place
initiale, et le marquage est stocké dans la propriété
markingdu sujet. - Le trait optionnel
WorkflowTraitexpose les méthodes du workflow : on l'injecte et on utilise ses constantes plutôt que des chaînes.
Énumérations et écouteurs
from, to et initialMarking acceptent aussi les cas d'une énumération adossée
à des chaînes ; #[Place] sur ces cas leur ajoute des métadonnées. Avec
places: TaskStatus::class, chaque cas devient une place, et Symfony lève une
erreur si le workflow en utilise une qui n'en est pas un.
La classe est un service ordinaire : elle injecte ses dépendances et porte ses
écouteurs, et l'argument workflow d'attributs comme #[AsGuardListener] y est
facultatif. Toutes les options de configuration restent disponibles :
expressions de garde, métadonnées, arcs pondérés, stockages de marquage
personnalisés, piste d'audit.
Source : New in Symfony 8.2: Attribute-Based Workflows, blog Symfony, 14 octobre 2026.