Skip to content

Commit 2f65b00

Browse files
committed
[Workflow] Add type information for multiple state marking store
1 parent 2bf7485 commit 2f65b00

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

workflow.rst

+38
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,44 @@ what actions are allowed on a blog post::
248248
// See a specific available transition for the post in the current state
249249
$transition = $workflow->getEnabledTransition($post, 'publish');
250250

251+
Using a multiple state marking store
252+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
253+
254+
If you are creating a :doc:`workflow </workflow/workflow-and-state-machine>`
255+
, your marking store may need to contain multiple places at the same time.
256+
If you are using Doctrine, the matching column definition should use the
257+
type ``json`` ::
258+
259+
// src/Entity/BlogPost.php
260+
namespace App\Entity;
261+
262+
use Doctrine\DBAL\Types\Types;
263+
use Doctrine\ORM\Mapping as ORM;
264+
265+
#[ORM\Entity]
266+
class BlogPost
267+
{
268+
#[ORM\Id]
269+
#[ORM\GeneratedValue]
270+
#[ORM\Column]
271+
private int $id;
272+
273+
// Type declaration is not mandatory and
274+
// matches the guessed value from Doctrine
275+
#[ORM\Column(type: Types::JSON)] // or #[ORM\Column(type: 'json')]
276+
private array $currentPlaces;
277+
278+
// ...
279+
}
280+
281+
.. tip::
282+
283+
You should not use the type ``simple_array`` for your marking store.
284+
Inside a multiple state marking store, places are store as keys with
285+
a value of one, such as ``['draft' => 1]``. If the marking store contains
286+
only one place, this Doctrine type will store its value only as a string,
287+
resulting in the loss of the object's current place.
288+
251289
Accessing the Workflow in a Class
252290
---------------------------------
253291

0 commit comments

Comments
 (0)