Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\Validator\DependencyInjection; Chris@0: Chris@0: use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; Chris@0: use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass; Chris@4: use Symfony\Component\DependencyInjection\ContainerBuilder; Chris@0: use Symfony\Component\DependencyInjection\Reference; Chris@0: Chris@0: /** Chris@0: * @author Johannes M. Schmitt Chris@0: * @author Robin Chalas Chris@0: */ Chris@0: class AddConstraintValidatorsPass implements CompilerPassInterface Chris@0: { Chris@0: private $validatorFactoryServiceId; Chris@0: private $constraintValidatorTag; Chris@0: Chris@0: public function __construct($validatorFactoryServiceId = 'validator.validator_factory', $constraintValidatorTag = 'validator.constraint_validator') Chris@0: { Chris@0: $this->validatorFactoryServiceId = $validatorFactoryServiceId; Chris@0: $this->constraintValidatorTag = $constraintValidatorTag; Chris@0: } Chris@0: Chris@0: public function process(ContainerBuilder $container) Chris@0: { Chris@0: if (!$container->hasDefinition($this->validatorFactoryServiceId)) { Chris@0: return; Chris@0: } Chris@0: Chris@4: $validators = []; Chris@0: foreach ($container->findTaggedServiceIds($this->constraintValidatorTag, true) as $id => $attributes) { Chris@0: $definition = $container->getDefinition($id); Chris@0: Chris@0: if (isset($attributes[0]['alias'])) { Chris@0: $validators[$attributes[0]['alias']] = new Reference($id); Chris@0: } Chris@0: Chris@0: $validators[$definition->getClass()] = new Reference($id); Chris@0: } Chris@0: Chris@0: $container Chris@0: ->getDefinition($this->validatorFactoryServiceId) Chris@0: ->replaceArgument(0, ServiceLocatorTagPass::register($container, $validators)) Chris@0: ; Chris@0: } Chris@0: }