Skip to content

Commit ef5d811

Browse files
committed
minor #20967 [Workflow] Document custom workflow definition validator (ker0x)
This PR was merged into the 7.3 branch. Discussion ---------- [Workflow] Document custom workflow definition validator Fix #20950 Commits ------- e0fcd1c [Workflow] Document custom workflow definition validator
2 parents ef9c945 + e0fcd1c commit ef5d811

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

workflow.rst

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,6 +1306,85 @@ In Twig templates, metadata is available via the ``workflow_metadata()`` functio
13061306
</ul>
13071307
</p>
13081308

1309+
Adding Custom Definition Validators
1310+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1311+
1312+
Sometimes, you may want to add custom logics to validate your workflow definition.
1313+
To do this, you need to implement the
1314+
:class:`Symfony\\Component\\Workflow\\Validator\\DefinitionValidatorInterface`::
1315+
1316+
namespace App\Workflow\Validator;
1317+
1318+
use Symfony\Component\Workflow\Definition;
1319+
use Symfony\Component\Workflow\Exception\InvalidDefinitionException;
1320+
use Symfony\Component\Workflow\Validator\DefinitionValidatorInterface;
1321+
1322+
final class BlogPublishingValidator implements DefinitionValidatorInterface
1323+
{
1324+
public function validate(Definition $definition, string $name): void
1325+
{
1326+
if (!$definition->getMetadataStore()->getMetadata('title')) {
1327+
throw new InvalidDefinitionException(sprintf('The workflow metadata title is missing in Workflow "%s".', $name));
1328+
}
1329+
}
1330+
}
1331+
1332+
Once your definition validator is implemented, you can configure your workflow to use
1333+
it:
1334+
1335+
.. configuration-block::
1336+
1337+
.. code-block:: yaml
1338+
1339+
# config/packages/workflow.yaml
1340+
framework:
1341+
workflows:
1342+
blog_publishing:
1343+
# ... previous configuration
1344+
1345+
definition_validators:
1346+
- App\Workflow\Validator\BlogPublishingValidator
1347+
1348+
.. code-block:: xml
1349+
1350+
<!-- config/packages/workflow.xml -->
1351+
<?xml version="1.0" encoding="UTF-8" ?>
1352+
<container xmlns="http://symfony.com/schema/dic/services"
1353+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1354+
xmlns:framework="http://symfony.com/schema/dic/symfony"
1355+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd
1356+
http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd"
1357+
>
1358+
<framework:config>
1359+
<framework:workflow name="blog_publishing">
1360+
<!-- ... previous configuration -->
1361+
<framework:definition-validators>App\Workflow\Validator\BlogPublishingValidator</framework:definition-validators>
1362+
</framework:workflow>
1363+
</framework:config>
1364+
</container>
1365+
1366+
.. code-block:: php
1367+
1368+
// config/packages/workflow.php
1369+
use Symfony\Config\FrameworkConfig;
1370+
1371+
return static function (FrameworkConfig $framework): void {
1372+
$blogPublishing = $framework->workflows()->workflows('blog_publishing');
1373+
// ... previous configuration
1374+
1375+
$blogPublishing->definitionValidators([
1376+
App\Workflow\Validator\BlogPublishingValidator::class
1377+
]);
1378+
1379+
// ...
1380+
};
1381+
1382+
The ``BlogPublishingValidator`` definition validator will be executed during the container compilation.
1383+
1384+
.. versionadded:: 7.3
1385+
1386+
Support for defining custom workflow definition validators was introduced in Symfony 7.3.
1387+
13091388
Learn more
13101389
----------
13111390

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy