@@ -533,3 +533,145 @@ You can access the message from a Twig template as follows:
533533Don't need a human-readable message? You can still use::
534534
535535 $event->setBlocked('true');
536+
537+ Storing Metadata
538+ ----------------
539+
540+ ..versionadded ::4.1
541+ The feature to store metadata in workflows was introduced in Symfony 4.1.
542+
543+ In case you need it, you can store arbitrary metadata in workflows, their
544+ places, and their transitions using the ``metadata `` option. This metadata can
545+ be as simple as the title of the workflow or as complex as your own application
546+ requires:
547+
548+ ..configuration-block ::
549+
550+ ..code-block ::yaml
551+
552+ # config/packages/workflow.yaml
553+ framework :
554+ workflows :
555+ blog_publishing :
556+ metadata :' Blog Publishing Workflow'
557+ # ...
558+ places :
559+ draft :
560+ metadata :
561+ max_num_of_words :500
562+ # ...
563+ transitions :
564+ to_review :
565+ from :draft
566+ to :review
567+ metadata :
568+ priority :0.5
569+ # ...
570+
571+ ..code-block ::xml
572+
573+ <!-- config/packages/workflow.xml-->
574+ <?xml version =" 1.0" encoding =" utf-8" ?>
575+ <container xmlns =" http://symfony.com/schema/dic/services"
576+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
577+ xmlns : framework =" http://symfony.com/schema/dic/symfony"
578+ xsi : schemaLocation =" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
579+ http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"
580+ >
581+
582+ <framework : config >
583+ <framework : workflow name =" blog_publishing" type =" workflow" >
584+ <framework : metadata >
585+ <framework : title >Blog Publishing Workflow</framework : title >
586+ </framework : metadata >
587+ <!-- ...-->
588+
589+ <framework : place name =" draft" >
590+ <framework : metadata >
591+ <framework : max-num-of-words >500</framework : max-num-of-words >
592+ </framework : metadata >
593+ </framework : place >
594+ <!-- ...-->
595+
596+ <framework : transition name =" to_review" >
597+ <framework : from >draft</framework : from >
598+ <framework : to >review</framework : to >
599+ <framework : metadata >
600+ <framework : priority >0.5</framework : priority >
601+ </framework : metadata >
602+ </framework : transition >
603+ <!-- ...-->
604+ </framework : workflow >
605+ </framework : config >
606+ </container >
607+
608+ ..code-block ::php
609+
610+ // config/packages/workflow.php
611+
612+ $container->loadFromExtension('framework', array(
613+ // ...
614+ 'workflows' => array(
615+ 'blog_publishing' => array(
616+ 'metadata' => array(
617+ 'title' => 'Blog Publishing Workflow',
618+ ),
619+ // ...
620+ 'places' => array(
621+ 'draft' => array(
622+ 'max_num_of_words' => 500,
623+ ),
624+ // ...
625+ ),
626+ 'transitions' => array(
627+ 'to_review' => array(
628+ 'from' => 'draft',
629+ 'to' => 'review',
630+ 'metadata' => array(
631+ 'priority' => 0.5,
632+ ),
633+ ),
634+ ),
635+ ),
636+ ),
637+ ));
638+
639+ Then, you can access this metadata in your PHP code as follows::
640+
641+ // MISSING EXAMPLE HERE...
642+ //
643+ //
644+ //
645+ //
646+
647+ In Twig templates, metadata is available via the ``workflow_metadata() `` function:
648+
649+ ..code-block ::twig
650+
651+ <h2>Metadata</h2>
652+ <p>
653+ <strong>Workflow</strong>:<br >
654+ <code>{{ workflow_metadata(article, 'title') }}</code>
655+ </p>
656+ <p>
657+ <strong>Current place(s)</strong>
658+ <ul>
659+ {% for place in workflow_marked_places(article) %}
660+ <li>
661+ {{ place }}:
662+ <code>{{ workflow_metadata(article, 'max_num_of_words', place) ?: 'Unlimited'}}</code>
663+ </li>
664+ {% endfor %}
665+ </ul>
666+ </p>
667+ <p>
668+ <strong>Enabled transition(s)</strong>
669+ <ul>
670+ {% for transition in workflow_transitions(article) %}
671+ <li>
672+ {{ transition.name }}:
673+ <code>{{ workflow_metadata(article, 'priority', transition) ?: '0' }}</code>
674+ </li>
675+ {% endfor %}
676+ </ul>
677+ </p>