@@ -32,28 +32,30 @@ a ``Definition`` and a way to write the states to the objects (i.e. an
32
32
instance of a :class: `Symfony\\ Component\\ Workflow\\ MarkingStore\\ MarkingStoreInterface `).
33
33
34
34
Consider the following example for a blog post. A post can have one of a number
35
- of predefined statuses (`draft `, `review `, `rejected `, `published `). In a workflow,
35
+ of predefined statuses (`draft `, `reviewed `, `rejected `, `published `). In a workflow,
36
36
these statuses are called **places **. You can define the workflow like this::
37
37
38
38
use Symfony\Component\Workflow\DefinitionBuilder;
39
- use Symfony\Component\Workflow\MarkingStore\SingleStateMarkingStore ;
39
+ use Symfony\Component\Workflow\MarkingStore\MethodMarkingStore ;
40
40
use Symfony\Component\Workflow\Transition;
41
41
use Symfony\Component\Workflow\Workflow;
42
42
43
43
$definitionBuilder = new DefinitionBuilder();
44
- $definition = $definitionBuilder->addPlaces(['draft', 'review ', 'rejected', 'published'])
44
+ $definition = $definitionBuilder->addPlaces(['draft', 'reviewed ', 'rejected', 'published'])
45
45
// Transitions are defined with a unique name, an origin place and a destination place
46
- ->addTransition(new Transition('to_review', 'draft', 'review '))
47
- ->addTransition(new Transition('publish', 'review ', 'published'))
48
- ->addTransition(new Transition('reject', 'review ', 'rejected'))
46
+ ->addTransition(new Transition('to_review', 'draft', 'reviewed '))
47
+ ->addTransition(new Transition('publish', 'reviewed ', 'published'))
48
+ ->addTransition(new Transition('reject', 'reviewed ', 'rejected'))
49
49
->build()
50
50
;
51
51
52
- $marking = new SingleStateMarkingStore('currentState');
52
+ $singleState = true; // true if the subject can be in only one state at a given time
53
+ $property = 'currentState' // subject property name where the state is stored
54
+ $marking = new MethodMarkingStore($singleState, $property);
53
55
$workflow = new Workflow($definition, $marking);
54
56
55
- The ``Workflow `` can now help you to decide what actions are allowed
56
- on a blog post depending on what *place * it is in. This will keep your domain
57
+ The ``Workflow `` can now help you to decide what * transitions * ( actions) are allowed
58
+ on a blog post depending on what *place * (state) it is in. This will keep your domain
57
59
logic in one place and not spread all over your application.
58
60
59
61
When you define multiple workflows you should consider using a ``Registry ``,
@@ -66,11 +68,11 @@ are trying to use it with::
66
68
use Symfony\Component\Workflow\Registry;
67
69
use Symfony\Component\Workflow\SupportStrategy\InstanceOfSupportStrategy;
68
70
69
- $blogWorkflow = ...
71
+ $blogPostWorkflow = ...
70
72
$newsletterWorkflow = ...
71
73
72
74
$registry = new Registry();
73
- $registry->addWorkflow($blogWorkflow , new InstanceOfSupportStrategy(BlogPost::class));
75
+ $registry->addWorkflow($blogPostWorkflow , new InstanceOfSupportStrategy(BlogPost::class));
74
76
$registry->addWorkflow($newsletterWorkflow, new InstanceOfSupportStrategy(Newsletter::class));
75
77
76
78
Usage
@@ -80,17 +82,17 @@ When you have configured a ``Registry`` with your workflows,
80
82
you can retrieve a workflow from it and use it as follows::
81
83
82
84
// ...
83
- // Consider that $post is in state "draft" by default
84
- $post = new BlogPost();
85
- $workflow = $registry->get($post );
85
+ // Consider that $blogPost is in place "draft" by default
86
+ $blogPost = new BlogPost();
87
+ $workflow = $registry->get($blogPost );
86
88
87
- $workflow->can($post , 'publish'); // False
88
- $workflow->can($post , 'to_review'); // True
89
+ $workflow->can($blogPost , 'publish'); // False
90
+ $workflow->can($blogPost , 'to_review'); // True
89
91
90
- $workflow->apply($post , 'to_review'); // $post is now in state "review "
92
+ $workflow->apply($blogPost , 'to_review'); // $blogPost is now in place "reviewed "
91
93
92
- $workflow->can($post , 'publish'); // True
93
- $workflow->getEnabledTransitions($post ); // [' publish', ' reject']
94
+ $workflow->can($blogPost , 'publish'); // True
95
+ $workflow->getEnabledTransitions($blogPost ); // $blogPost can perform transition " publish" or " reject"
94
96
95
97
Learn more
96
98
----------
0 commit comments