Skip to content

Commit e740493

Browse files
committed
Documented the workflow metadata
1 parent 3d4a077 commit e740493

File tree

1 file changed

+142
-0
lines changed

1 file changed

+142
-0
lines changed

workflow/usage.rst

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,3 +450,145 @@ The following example shows these functions in action:
450450
{% if 'waiting_some_approval' in workflow_marked_places(post) %}
451451
<span class="label">PENDING</span>
452452
{% endif %}
453+
454+
Storing Metadata
455+
----------------
456+
457+
.. versionadded:: 4.1
458+
The feature to store metadata in workflows was introduced in Symfony 4.1.
459+
460+
In case you need it, you can store arbitrary metadata in workflows, their
461+
places, and their transitions using the ``metadata`` option. This metadata can
462+
be as simple as the title of the workflow or as complex as your own application
463+
requires:
464+
465+
.. configuration-block::
466+
467+
.. code-block:: yaml
468+
469+
# config/packages/workflow.yaml
470+
framework:
471+
workflows:
472+
blog_publishing:
473+
metadata: 'Blog Publishing Workflow'
474+
# ...
475+
places:
476+
draft:
477+
metadata:
478+
max_num_of_words: 500
479+
# ...
480+
transitions:
481+
to_review:
482+
from: draft
483+
to: review
484+
metadata:
485+
priority: 0.5
486+
# ...
487+
488+
.. code-block:: xml
489+
490+
<!-- config/packages/workflow.xml -->
491+
<?xml version="1.0" encoding="utf-8" ?>
492+
<container xmlns="http://symfony.com/schema/dic/services"
493+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
494+
xmlns:framework="http://symfony.com/schema/dic/symfony"
495+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
496+
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd"
497+
>
498+
499+
<framework:config>
500+
<framework:workflow name="blog_publishing" type="workflow">
501+
<framework:metadata>
502+
<framework:title>Blog Publishing Workflow</framework:title>
503+
</framework:metadata>
504+
<!-- ... -->
505+
506+
<framework:place name="draft">
507+
<framework:metadata>
508+
<framework:max-num-of-words>500</framework:max-num-of-words>
509+
</framework:metadata>
510+
</framework:place>
511+
<!-- ... -->
512+
513+
<framework:transition name="to_review">
514+
<framework:from>draft</framework:from>
515+
<framework:to>review</framework:to>
516+
<framework:metadata>
517+
<framework:priority>0.5</framework:priority>
518+
</framework:metadata>
519+
</framework:transition>
520+
<!-- ... -->
521+
</framework:workflow>
522+
</framework:config>
523+
</container>
524+
525+
.. code-block:: php
526+
527+
// config/packages/workflow.php
528+
529+
$container->loadFromExtension('framework', array(
530+
// ...
531+
'workflows' => array(
532+
'blog_publishing' => array(
533+
'metadata' => array(
534+
'title' => 'Blog Publishing Workflow',
535+
),
536+
// ...
537+
'places' => array(
538+
'draft' => array(
539+
'max_num_of_words' => 500,
540+
),
541+
// ...
542+
),
543+
'transitions' => array(
544+
'to_review' => array(
545+
'from' => 'draft',
546+
'to' => 'review',
547+
'metadata' => array(
548+
'priority' => 0.5,
549+
),
550+
),
551+
),
552+
),
553+
),
554+
));
555+
556+
Then, you can access this metadata in your PHP code as follows::
557+
558+
// MISSING EXAMPLE HERE...
559+
//
560+
//
561+
//
562+
//
563+
564+
In Twig templates, metadata is available via the ``workflow_metadata()`` function:
565+
566+
.. code-block:: twig
567+
568+
<h2>Metadata</h2>
569+
<p>
570+
<strong>Workflow</strong>:<br >
571+
<code>{{ workflow_metadata(article, 'title') }}</code>
572+
</p>
573+
<p>
574+
<strong>Current place(s)</strong>
575+
<ul>
576+
{% for place in workflow_marked_places(article) %}
577+
<li>
578+
{{ place }}:
579+
<code>{{ workflow_metadata(article, 'max_num_of_words', place) ?: 'Unlimited'}}</code>
580+
</li>
581+
{% endfor %}
582+
</ul>
583+
</p>
584+
<p>
585+
<strong>Enabled transition(s)</strong>
586+
<ul>
587+
{% for transition in workflow_transitions(article) %}
588+
<li>
589+
{{ transition.name }}:
590+
<code>{{ workflow_metadata(article, 'priority', transition) ?: '0' }}</code>
591+
</li>
592+
{% endfor %}
593+
</ul>
594+
</p>

0 commit comments

Comments
 (0)