4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Validator\Validator;
14 use Symfony\Component\Validator\ConstraintValidatorFactoryInterface;
15 use Symfony\Component\Validator\Context\ExecutionContextFactoryInterface;
16 use Symfony\Component\Validator\Context\ExecutionContextInterface;
17 use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface;
18 use Symfony\Component\Validator\ObjectInitializerInterface;
21 * Recursive implementation of {@link ValidatorInterface}.
23 * @author Bernhard Schussek <bschussek@gmail.com>
25 class RecursiveValidator implements ValidatorInterface
28 * @var ExecutionContextFactoryInterface
30 protected $contextFactory;
33 * @var MetadataFactoryInterface
35 protected $metadataFactory;
38 * @var ConstraintValidatorFactoryInterface
40 protected $validatorFactory;
43 * @var ObjectInitializerInterface[]
45 protected $objectInitializers;
48 * Creates a new validator.
50 * @param ExecutionContextFactoryInterface $contextFactory The factory for
51 * creating new contexts
52 * @param MetadataFactoryInterface $metadataFactory The factory for
53 * fetching the metadata
54 * of validated objects
55 * @param ConstraintValidatorFactoryInterface $validatorFactory The factory for creating
56 * constraint validators
57 * @param ObjectInitializerInterface[] $objectInitializers The object initializers
59 public function __construct(ExecutionContextFactoryInterface $contextFactory, MetadataFactoryInterface $metadataFactory, ConstraintValidatorFactoryInterface $validatorFactory, array $objectInitializers = array())
61 $this->contextFactory = $contextFactory;
62 $this->metadataFactory = $metadataFactory;
63 $this->validatorFactory = $validatorFactory;
64 $this->objectInitializers = $objectInitializers;
70 public function startContext($root = null)
72 return new RecursiveContextualValidator(
73 $this->contextFactory->createContext($this, $root),
74 $this->metadataFactory,
75 $this->validatorFactory,
76 $this->objectInitializers
83 public function inContext(ExecutionContextInterface $context)
85 return new RecursiveContextualValidator(
87 $this->metadataFactory,
88 $this->validatorFactory,
89 $this->objectInitializers
96 public function getMetadataFor($object)
98 return $this->metadataFactory->getMetadataFor($object);
104 public function hasMetadataFor($object)
106 return $this->metadataFactory->hasMetadataFor($object);
112 public function validate($value, $constraints = null, $groups = null)
114 return $this->startContext($value)
115 ->validate($value, $constraints, $groups)
122 public function validateProperty($object, $propertyName, $groups = null)
124 return $this->startContext($object)
125 ->validateProperty($object, $propertyName, $groups)
132 public function validatePropertyValue($objectOrClass, $propertyName, $value, $groups = null)
134 // If a class name is passed, take $value as root
135 return $this->startContext(is_object($objectOrClass) ? $objectOrClass : $value)
136 ->validatePropertyValue($objectOrClass, $propertyName, $value, $groups)