diff --git a/components/workflow.rst b/components/workflow.rst index a35602f1ac2..8cedf2dbeed 100644 --- a/components/workflow.rst +++ b/components/workflow.rst @@ -94,6 +94,18 @@ you can retrieve a workflow from it and use it as follows:: $workflow->can($blogPost, 'publish'); // True $workflow->getEnabledTransitions($blogPost); // $blogPost can perform transition "publish" or "reject" +Initialization +-------------- + +If the property of your object is null and you want to set it with the `initial_marking` from the configuration, you can call the `getMarking()` method to initialize the object property:: + + // ... + $blogPost = new BlogPost(); + $workflow = $registry->get($blogPost); + + // initiate workflow + $workflow->getMarking($blogPost); + Learn more ---------- diff --git a/workflow.rst b/workflow.rst index 43593eb739d..f873f77058c 100644 --- a/workflow.rst +++ b/workflow.rst @@ -378,11 +378,34 @@ order: * ``workflow.[workflow name].announce`` * ``workflow.[workflow name].announce.[transition name]`` + You can avoid triggering those events by using the context:: + + $workflow->apply($subject, $transitionName, [Workflow::DISABLE_ANNOUNCE_EVENT => true]); + + .. versionadded:: 5.1 + + The ``Workflow::DISABLE_ANNOUNCE_EVENT`` constant was introduced in Symfony 5.1. + + .. versionadded:: 5.2 + + In Symfony 5.2, the context is accessible in all events:: + + // $context must be an array + $context = ['context_key' => 'context_value']; + $workflow->apply($subject, $transitionName, $context); + + // in an event listener + $context = $event->getContext(); // returns ['context'] + .. note:: The leaving and entering events are triggered even for transitions that stay in same place. +.. note:: + + If you initialize the marking by calling ``$workflow->getMarking($object);``, then the ``workflow.[workflow name].entered.[initial place name]`` event will be called with a default context ``Workflow::DEFAULT_INITIAL_CONTEXT``. + Here is an example of how to enable logging for every time a "blog_publishing" workflow leaves a place::