@@ -43,7 +43,7 @@ like this:
4343audit_trail :
4444enabled :true
4545marking_store :
46- type :' multiple_state' # or 'single_state'
46+ type :' multiple_state' # or 'single_state', 'method' ('method' was added in 4.3)
4747arguments :
4848 -' currentPlace'
4949supports :
@@ -127,7 +127,7 @@ like this:
127127 'enabled' => true
128128 ],
129129 'marking_store' => [
130- 'type' => 'multiple_state', // or 'single_state'
130+ 'type' => 'multiple_state', // or 'single_state', 'method' ('method' was added in 4.3)
131131 'arguments' => ['currentPlace'],
132132 ],
133133 'supports' => ['App\Entity\BlogPost'],
@@ -167,7 +167,7 @@ As configured, the following property is used by the marking store::
167167
168168..note ::
169169
170- The marking store type could be "multiple_state" or "single_state ".
170+ The marking store type could be "multiple_state", "single_state" or "method ".
171171 A single state marking store does not support a model being on multiple places
172172 at the same time.
173173
@@ -221,11 +221,87 @@ you can get the workflow by injecting the Workflow registry service::
221221 // ... if the transition is not allowed
222222 }
223223
224+ // Update the currentState on the post passing some contextual data
225+ // to the whole workflow process
226+ try {
227+ $workflow->apply($post, 'publish', [
228+ 'log_comment' => 'My logging comment for the publish transition.',
229+ ]);
230+ } catch (TransitionException $exception) {
231+ // ... if the transition is not allowed
232+ }
233+
224234 // See all the available transitions for the post in the current state
225235 $transitions = $workflow->getEnabledTransitions($post);
226236 }
227237 }
228238
239+ ..versionadded ::4.1
240+
241+ The:class: `Symfony\\ Component\\ Workflow\\ Exception\\ TransitionException `
242+ class was introduced in Symfony 4.1.
243+
244+ ..versionadded ::4.1
245+
246+ The:method: `Symfony\\ Component\\ Workflow\\ Registry::all ` method was
247+ introduced in Symfony 4.1.
248+
249+ ..versionadded ::4.3
250+
251+ The:method: `Symfony\\ Component\\ Workflow\\ Workflow::apply ` has now a new parameter ``$context ``
252+ that is passed to the:class: `Symfony\\ Component\\ Workflow\\ MarkingStore\\ MarkingStoreInterface `
253+ :method: `Symfony\\ Component\\ Workflow\\ MarkingStore\\ MarkingStoreInterface::setMarking ` method.
254+
255+ An example of usage with the ``$context `` parameter can be when you need,
256+ in addition of marking your object in its new place, to contextualize this change.
257+
258+ ..tip ::
259+
260+ Configure the ``type `` as ``method `` of the ``marking_store `` option to use this feature
261+ without implementing your own marking store.
262+
263+ You can also use this ``$context `` in your own marking store implementation.
264+ A simple implementation example is when you want to store the place as integer instead of string in your object.
265+
266+ Lets say your object has a status property, stored as an integer in your storage, and you want to log an optional
267+ comment any time the status changes::
268+
269+ // your own implementation class, to define in the configuration "marking_store"
270+
271+ class ObjectMarkingStore implements MarkingStoreInterface
272+ {
273+ public function getMarking($subject)
274+ {
275+ $subject->getStatus();
276+ // ...
277+ // return a marking
278+ }
279+
280+ public function setMarking($subject, Marking $marking, array $context);
281+ {
282+ // ...
283+ $subject->setStatus($newStatus, $context['log_comment'] ?? null);
284+ }
285+ }
286+
287+ // and in your Object class
288+
289+ public function getStatus()
290+ {
291+ return $this->status;
292+ }
293+
294+ public function setStatus(int $status, ?string $comment = null)
295+ {
296+ $this->status = $status;
297+ $this->addStatusLogRecord(new StatusLog($this, $comment));
298+
299+ return $this;
300+ }
301+
302+ // the StatusLog class can have a createdAt, a username,
303+ // the new status, and finally your optional comment retrieved from the workflow context.
304+
229305Using Events
230306------------
231307