vendor/symfony/src/Symfony/Component/Validator/GraphWalker.php
author ymh <ymh.work@gmail.com>
Sat, 24 Sep 2011 15:40:41 +0200
changeset 0 7f95f8617b0b
permissions -rwxr-xr-x
first commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * This file is part of the Symfony package.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * (c) Fabien Potencier <fabien@symfony.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * For the full copyright and license information, please view the LICENSE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * file that was distributed with this source code.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
namespace Symfony\Component\Validator;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
use Symfony\Component\Validator\ConstraintValidatorFactoryInterface;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
use Symfony\Component\Validator\Constraint;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
use Symfony\Component\Validator\Constraints\All;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
use Symfony\Component\Validator\Constraints\Valid;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
use Symfony\Component\Validator\Exception\UnexpectedTypeException;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
use Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
use Symfony\Component\Validator\Mapping\ClassMetadata;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
use Symfony\Component\Validator\Mapping\MemberMetadata;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 * Responsible for walking over and initializing validation on different
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 * types of items.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 * @author Fabien Potencier <fabien@symfony.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 * @author Bernhard Schussek <bernhard.schussek@symfony.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
class GraphWalker
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    protected $context;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    protected $validatorFactory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    protected $metadataFactory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    protected $validatorInitializers = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    protected $validatedObjects = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    public function __construct($root, ClassMetadataFactoryInterface $metadataFactory, ConstraintValidatorFactoryInterface $factory, array $validatorInitializers = array())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        $this->context = new ExecutionContext($root, $this, $metadataFactory);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        $this->validatorFactory = $factory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        $this->metadataFactory = $metadataFactory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        $this->validatorInitializers = $validatorInitializers;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
     * @return ConstraintViolationList
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    public function getViolations()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        return $this->context->getViolations();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
     * Initialize validation on the given object using the given metadata
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
     * instance and validation group.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
     * @param ClassMetadata $metadata
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
     * @param object        $object       The object to validate
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
     * @param string        $group        The validator group to use for validation
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
     * @param string        $propertyPath
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    public function walkObject(ClassMetadata $metadata, $object, $group, $propertyPath)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        foreach ($this->validatorInitializers as $initializer) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
            if (!$initializer instanceof ObjectInitializerInterface) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
                throw new \LogicException('Validator initializers must implement ObjectInitializerInterface.');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
            $initializer->initialize($object);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        $this->context->setCurrentClass($metadata->getClassName());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
        if ($group === Constraint::DEFAULT_GROUP && $metadata->hasGroupSequence()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
            $groups = $metadata->getGroupSequence();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
            foreach ($groups as $group) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
                $this->walkObjectForGroup($metadata, $object, $group, $propertyPath, Constraint::DEFAULT_GROUP);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
                if (count($this->getViolations()) > 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
                    break;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
            $this->walkObjectForGroup($metadata, $object, $group, $propertyPath);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
    protected function walkObjectForGroup(ClassMetadata $metadata, $object, $group, $propertyPath, $propagatedGroup = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
        $hash = spl_object_hash($object);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
        // Exit, if the object is already validated for the current group
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
        if (isset($this->validatedObjects[$hash])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
            if (isset($this->validatedObjects[$hash][$group])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
                return;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
            $this->validatedObjects[$hash] = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        // Remember validating this object before starting and possibly
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        // traversing the object graph
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
        $this->validatedObjects[$hash][$group] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
        foreach ($metadata->findConstraints($group) as $constraint) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
            $this->walkConstraint($constraint, $object, $group, $propertyPath);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
        if (null !== $object) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
            foreach ($metadata->getConstrainedProperties() as $property) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
                $localPropertyPath = empty($propertyPath) ? $property : $propertyPath.'.'.$property;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
                $this->walkProperty($metadata, $property, $object, $group, $localPropertyPath, $propagatedGroup);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
    public function walkProperty(ClassMetadata $metadata, $property, $object, $group, $propertyPath, $propagatedGroup = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
        foreach ($metadata->getMemberMetadatas($property) as $member) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
            $this->walkMember($member, $member->getValue($object), $group, $propertyPath, $propagatedGroup);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
    public function walkPropertyValue(ClassMetadata $metadata, $property, $value, $group, $propertyPath)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
        foreach ($metadata->getMemberMetadatas($property) as $member) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
            $this->walkMember($member, $value, $group, $propertyPath);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
    protected function walkMember(MemberMetadata $metadata, $value, $group, $propertyPath, $propagatedGroup = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
        $this->context->setCurrentProperty($metadata->getPropertyName());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
        foreach ($metadata->findConstraints($group) as $constraint) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
            $this->walkConstraint($constraint, $value, $group, $propertyPath);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
        if ($metadata->isCascaded()) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
            $this->walkReference($value, $propagatedGroup ?: $group, $propertyPath, $metadata->isCollectionCascaded());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
    public function walkReference($value, $group, $propertyPath, $traverse)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
        if (null !== $value) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
            if (!is_object($value) && !is_array($value)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
                throw new UnexpectedTypeException($value, 'object or array');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
            if ($traverse && (is_array($value) || $value instanceof \Traversable)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
                foreach ($value as $key => $element) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
                    // Ignore any scalar values in the collection
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
                    if (is_object($element) || is_array($element)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
                        $this->walkReference($element, $group, $propertyPath.'['.$key.']', $traverse);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
                    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
            if (is_object($value)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
                $metadata = $this->metadataFactory->getClassMetadata(get_class($value));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
                $this->walkObject($metadata, $value, $group, $propertyPath);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
    public function walkConstraint(Constraint $constraint, $value, $group, $propertyPath)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
        $validator = $this->validatorFactory->getInstance($constraint);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
        $this->context->setPropertyPath($propertyPath);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
        $this->context->setGroup($group);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
        $validator->initialize($this->context);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
        if (!$validator->isValid($value, $constraint)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
            // Resetting the property path. This is needed because some
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
            // validators, like CollectionValidator, use the walker internally
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
            // and so change the context.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
            $this->context->setPropertyPath($propertyPath);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
            $this->context->addViolation(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
                $validator->getMessageTemplate(),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
                $validator->getMessageParameters(),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
                $value
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
            );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
}