d'une série de tâches qui doivent être effectuées dans un ordre spécifique pour atteindre un résultat donné. Il peut impliquer des validations et des contrôles à chaque étape du processus. Son but est d'organiser et de rationaliser un processus, ainsi que d’en maximiser l'efficacité. 7
de processus dans une application : • Permet de décrire un modèle de processus ◦ via des états (places) ◦ et des transitions • Permet de gérer et de structurer les changements d'états 8
un seul endroit. Pour appliquer une transition, l'objet doit se trouver au moins à l'un des emplacements. Workflow L’objet peut se trouver à plusieurs endroits en même temps. Pour appliquer une transition, l'objet doit se trouver à tous les emplacements précédents. 11
et de gérer les processus métier d’une application. On peut valider que le panier est passé par l'ensemble des états nécessaires à sa transformation en commande. Utilisation d'événements pour déclencher des actions personnalisées. Historisation possible des changements d'états. 12
“CRUD” produits • choix de la livraison • ajout d’une adresse de livraison • ajout d’une adresse de facturation • choix du moyen de paiement • finalisation du panier 14 AVEC PRODUIT ADRESSE DE LIVRAISON ADRESSE DE FACTURATION FINALISÉ ASSOCIÉ À UN COMPTE TOUT CRÉATION
d’écrire un fichier de configuration (yaml, xml, php) Avec un fichier yaml, Symfony validera le fichier durant le cache warmup En utilisant les classes PHP du composant, il faudra valider manuellement avec WorkflowValidator ou StateMachineValidator 15
Pour les états : - bg_color : une couleur (nom ou code hexadécimal : red #FF0000) - description : une chaîne qui décrit l'état Pour les transitions : - label : une chaîne qui remplace le nom de la transition - color, bg_color : une couleur - arrow_color : une couleur 18
transition est possible Workflow::apply() pour appliquer une transition Workflow::getEnabledTransitions() voir les transitions applicables Event::isBlocked() savoir si une transition est bloqué Event::setBlocked() bloquer une ou toutes les transitions Event::addTransitionBlocker() bloquer de manière plus spécifique 24
on peut utiliser Registry, pour stocker et fournir l'accès aux différents workflows. Aide également à déterminer si un workflow prend en charge l'objet que l’on veut utiliser. 26
transitions. Par exemple, pour vérifier que l'utilisateur est bien authentifié ou qu'il possède les droits nécessaires. Pour cela, la définition de chaque transition supporte une option guard. 32
appel à des fonctions telles que is_fully_authenticated() ou is_granted(), et même accéder aux attributs de l'objet concerné. guard: "is_fully_authenticated() and has_role('ROLE_USER') and is_granted(SAME_USER, subject)" guard: "is_valid(subject, [orderable])" Invoqué à chaque utilisation des méthodes du workflow can(), apply() et getEnablesTransitions(). 33
la logique métier Définition des workflows dans un fichier de configuration, plutôt que dans le code Possibilité de définir des contraintes sur les transitions Facilité d'intégration avec d'autres composants Symfony 35
n’est pas de modifier l’objet mais de contenir des informations supplémentaires Il peut être utilisé pour stocker des données utiles pour prendre des décisions au niveau des transitions. 36
workflow_transitions() Retourne toutes les transitions possibles pour l’objet workflow_transition() Retourne une transition spécifique workflow_marked_places() Retourne les états courants de l’objet workflow_has_marked_place() Retourne si l’objet a bien l’état donné workflow_transition_blockers() Retourne les transitions blockers 48