Move ValidateWorkflowsPass to the Workflow component
This commit is contained in:
parent
bbe269f666
commit
8fe122fc79
@ -236,6 +236,10 @@ FrameworkBundle
|
|||||||
class has been deprecated and will be removed in 4.0.
|
class has been deprecated and will be removed in 4.0.
|
||||||
Use the `Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass` class instead.
|
Use the `Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass` class instead.
|
||||||
|
|
||||||
|
* The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ValidateWorkflowsPass`
|
||||||
|
class has been deprecated and will be removed in 4.0. Use the
|
||||||
|
`Symfony\Component\Workflow\DependencyInjection\ValidateWorkflowsPass` class instead.
|
||||||
|
|
||||||
HttpFoundation
|
HttpFoundation
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
@ -326,6 +326,10 @@ FrameworkBundle
|
|||||||
removed. Use the `Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass`
|
removed. Use the `Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass`
|
||||||
class instead.
|
class instead.
|
||||||
|
|
||||||
|
* The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ValidateWorkflowsPass` class
|
||||||
|
has been removed. Use the `Symfony\Component\Workflow\DependencyInjection\ValidateWorkflowsPass`
|
||||||
|
class instead.
|
||||||
|
|
||||||
HttpFoundation
|
HttpFoundation
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
@ -45,6 +45,8 @@ CHANGELOG
|
|||||||
`Symfony\Component\Validator\DependencyInjection\AddValidatorInitializersPass` instead
|
`Symfony\Component\Validator\DependencyInjection\AddValidatorInitializersPass` instead
|
||||||
* Deprecated `AddConstraintValidatorsPass`, use
|
* Deprecated `AddConstraintValidatorsPass`, use
|
||||||
`Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass` instead
|
`Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass` instead
|
||||||
|
* Deprecated `ValidateWorkflowsPass`, use
|
||||||
|
`Symfony\Component\Workflow\DependencyInjection\ValidateWorkflowsPass` instead
|
||||||
|
|
||||||
3.2.0
|
3.2.0
|
||||||
-----
|
-----
|
||||||
|
@ -11,54 +11,15 @@
|
|||||||
|
|
||||||
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
|
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
|
||||||
|
|
||||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
use Symfony\Component\Workflow\DependencyInjection\ValidateWorkflowsPass as BaseValidateWorkflowsPass;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
||||||
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
@trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0. Use %s instead.', ValidateWorkflowsPass::class, BaseValidateWorkflowsPass::class), E_USER_DEPRECATED);
|
||||||
use Symfony\Component\Workflow\Validator\DefinitionValidatorInterface;
|
|
||||||
use Symfony\Component\Workflow\Validator\StateMachineValidator;
|
|
||||||
use Symfony\Component\Workflow\Validator\WorkflowValidator;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
|
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
|
||||||
*/
|
|
||||||
class ValidateWorkflowsPass implements CompilerPassInterface
|
|
||||||
{
|
|
||||||
public function process(ContainerBuilder $container)
|
|
||||||
{
|
|
||||||
$taggedServices = $container->findTaggedServiceIds('workflow.definition', true);
|
|
||||||
foreach ($taggedServices as $id => $tags) {
|
|
||||||
$definition = $container->get($id);
|
|
||||||
foreach ($tags as $tag) {
|
|
||||||
if (!array_key_exists('name', $tag)) {
|
|
||||||
throw new RuntimeException(sprintf('The "name" for the tag "workflow.definition" of service "%s" must be set.', $id));
|
|
||||||
}
|
|
||||||
if (!array_key_exists('type', $tag)) {
|
|
||||||
throw new RuntimeException(sprintf('The "type" for the tag "workflow.definition" of service "%s" must be set.', $id));
|
|
||||||
}
|
|
||||||
if (!array_key_exists('marking_store', $tag)) {
|
|
||||||
throw new RuntimeException(sprintf('The "marking_store" for the tag "workflow.definition" of service "%s" must be set.', $id));
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->createValidator($tag)->validate($definition, $tag['name']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $tag
|
|
||||||
*
|
*
|
||||||
* @return DefinitionValidatorInterface
|
* @deprecated since version 3.3, to be removed in 4.0. Use {@link BaseValidateWorkflowsPass} instead
|
||||||
*/
|
*/
|
||||||
private function createValidator($tag)
|
class ValidateWorkflowsPass extends BaseValidateWorkflowsPass
|
||||||
{
|
{
|
||||||
if ('state_machine' === $tag['type']) {
|
|
||||||
return new StateMachineValidator();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('single_state' === $tag['marking_store']) {
|
|
||||||
return new WorkflowValidator(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new WorkflowValidator();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,6 @@ use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ContainerBuilder
|
|||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslationExtractorPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslationExtractorPass;
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslationDumperPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslationDumperPass;
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\UnusedTagsPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\UnusedTagsPass;
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ValidateWorkflowsPass;
|
|
||||||
use Symfony\Component\Config\DependencyInjection\ConfigCachePass;
|
use Symfony\Component\Config\DependencyInjection\ConfigCachePass;
|
||||||
use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass;
|
use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass;
|
||||||
use Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass;
|
use Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass;
|
||||||
@ -48,6 +47,7 @@ use Symfony\Component\HttpKernel\Bundle\Bundle;
|
|||||||
use Symfony\Component\Config\Resource\ClassExistenceResource;
|
use Symfony\Component\Config\Resource\ClassExistenceResource;
|
||||||
use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass;
|
use Symfony\Component\Validator\DependencyInjection\AddConstraintValidatorsPass;
|
||||||
use Symfony\Component\Validator\DependencyInjection\AddValidatorInitializersPass;
|
use Symfony\Component\Validator\DependencyInjection\AddValidatorInitializersPass;
|
||||||
|
use Symfony\Component\Workflow\DependencyInjection\ValidateWorkflowsPass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bundle.
|
* Bundle.
|
||||||
@ -106,7 +106,7 @@ class FrameworkBundle extends Bundle
|
|||||||
$container->addCompilerPass(new DataCollectorTranslatorPass());
|
$container->addCompilerPass(new DataCollectorTranslatorPass());
|
||||||
$container->addCompilerPass(new ControllerArgumentValueResolverPass());
|
$container->addCompilerPass(new ControllerArgumentValueResolverPass());
|
||||||
$container->addCompilerPass(new CachePoolPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 32);
|
$container->addCompilerPass(new CachePoolPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 32);
|
||||||
$container->addCompilerPass(new ValidateWorkflowsPass());
|
$this->addCompilerPassIfExists($container, ValidateWorkflowsPass::class);
|
||||||
$container->addCompilerPass(new CachePoolClearerPass(), PassConfig::TYPE_AFTER_REMOVING);
|
$container->addCompilerPass(new CachePoolClearerPass(), PassConfig::TYPE_AFTER_REMOVING);
|
||||||
$this->addCompilerPassIfExists($container, FormPass::class);
|
$this->addCompilerPassIfExists($container, FormPass::class);
|
||||||
|
|
||||||
|
@ -14,3 +14,4 @@ CHANGELOG
|
|||||||
* Added support for `Event::getWorkflowName()`.
|
* Added support for `Event::getWorkflowName()`.
|
||||||
* Added `SupportStrategyInterface` to allow custom strategies to decide whether
|
* Added `SupportStrategyInterface` to allow custom strategies to decide whether
|
||||||
or not a workflow supports a subject.
|
or not a workflow supports a subject.
|
||||||
|
* Added `ValidateWorkflowPass`.
|
||||||
|
@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Workflow\DependencyInjection;
|
||||||
|
|
||||||
|
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
||||||
|
use Symfony\Component\Workflow\Validator\StateMachineValidator;
|
||||||
|
use Symfony\Component\Workflow\Validator\WorkflowValidator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
|
||||||
|
*/
|
||||||
|
class ValidateWorkflowsPass implements CompilerPassInterface
|
||||||
|
{
|
||||||
|
private $definitionTag;
|
||||||
|
|
||||||
|
public function __construct($definitionTag = 'workflow.definition')
|
||||||
|
{
|
||||||
|
$this->definitionTag = $definitionTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function process(ContainerBuilder $container)
|
||||||
|
{
|
||||||
|
$taggedServices = $container->findTaggedServiceIds($this->definitionTag, true);
|
||||||
|
foreach ($taggedServices as $id => $tags) {
|
||||||
|
foreach ($tags as $tag) {
|
||||||
|
if (!array_key_exists('name', $tag)) {
|
||||||
|
throw new RuntimeException(sprintf('The "name" for the tag "%s" of service "%s" must be set.', $this->definitionTag, $id));
|
||||||
|
}
|
||||||
|
if (!array_key_exists('type', $tag)) {
|
||||||
|
throw new RuntimeException(sprintf('The "type" for the tag "%s" of service "%s" must be set.', $this->definitionTag, $id));
|
||||||
|
}
|
||||||
|
if (!array_key_exists('marking_store', $tag)) {
|
||||||
|
throw new RuntimeException(sprintf('The "marking_store" for the tag "%s" of service "%s" must be set.', $this->definitionTag, $id));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->createValidator($tag)->validate($container->get($id), $tag['name']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createValidator($tag)
|
||||||
|
{
|
||||||
|
if ('state_machine' === $tag['type']) {
|
||||||
|
return new StateMachineValidator();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('single_state' === $tag['marking_store']) {
|
||||||
|
return new WorkflowValidator(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new WorkflowValidator();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Component\Workflow\Tests;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\Workflow\Definition;
|
||||||
|
use Symfony\Component\Workflow\DependencyInjection\ValidateWorkflowsPass;
|
||||||
|
use Symfony\Component\Workflow\Transition;
|
||||||
|
|
||||||
|
class ValidateWorkflowsPassTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testProcess()
|
||||||
|
{
|
||||||
|
$container = $this->getMockBuilder(ContainerBuilder::class)->getMock();
|
||||||
|
$container
|
||||||
|
->expects($this->once())
|
||||||
|
->method('findTaggedServiceIds')
|
||||||
|
->with('workflow.definition')
|
||||||
|
->willReturn(array('definition1' => array('workflow.definition' => array('name' => 'wf1', 'type' => 'state_machine', 'marking_store' => 'foo'))));
|
||||||
|
|
||||||
|
$container
|
||||||
|
->expects($this->once())
|
||||||
|
->method('get')
|
||||||
|
->with('definition1')
|
||||||
|
->willReturn(new Definition(array('a', 'b', 'c'), array(new Transition('t1', 'a', 'b'), new Transition('t2', 'a', 'c'))));
|
||||||
|
|
||||||
|
(new ValidateWorkflowsPass())->process($container);
|
||||||
|
}
|
||||||
|
}
|
@ -25,6 +25,7 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"psr/log": "~1.0",
|
"psr/log": "~1.0",
|
||||||
|
"symfony/dependency-injection": "~2.8|~3.0",
|
||||||
"symfony/event-dispatcher": "~2.1|~3.0",
|
"symfony/event-dispatcher": "~2.1|~3.0",
|
||||||
"symfony/expression-language": "~2.8|~3.0",
|
"symfony/expression-language": "~2.8|~3.0",
|
||||||
"symfony/security-core": "~2.8|~3.0"
|
"symfony/security-core": "~2.8|~3.0"
|
||||||
|
Reference in New Issue
Block a user