public function testValidatePropertyValueWithClassName() { $callback1 = function ($value, ExecutionContextInterface $context) { $propertyMetadatas = $this->metadata->getPropertyMetadata('firstName'); $this->assertSame($this::ENTITY_CLASS, $context->getClassName()); $this->assertSame('firstName', $context->getPropertyName()); $this->assertSame('', $context->getPropertyPath()); $this->assertSame('Group', $context->getGroup()); $this->assertSame($propertyMetadatas[0], $context->getMetadata()); $this->assertSame('Bernhard', $context->getRoot()); $this->assertSame('Bernhard', $context->getValue()); $this->assertSame('Bernhard', $value); $context->addViolation('Message %param%', array('%param%' => 'value')); }; $callback2 = function ($value, ExecutionContextInterface $context) { $context->addViolation('Other violation'); }; $this->metadata->addPropertyConstraint('firstName', new Callback(array('callback' => $callback1, 'groups' => 'Group'))); $this->metadata->addPropertyConstraint('lastName', new Callback(array('callback' => $callback2, 'groups' => 'Group'))); $violations = $this->validatePropertyValue(self::ENTITY_CLASS, 'firstName', 'Bernhard', 'Group'); /** @var ConstraintViolationInterface[] $violations */ $this->assertCount(1, $violations); $this->assertSame('Message value', $violations[0]->getMessage()); $this->assertSame('Message %param%', $violations[0]->getMessageTemplate()); $this->assertSame(array('%param%' => 'value'), $violations[0]->getParameters()); $this->assertSame('', $violations[0]->getPropertyPath()); $this->assertSame('Bernhard', $violations[0]->getRoot()); $this->assertSame('Bernhard', $violations[0]->getInvalidValue()); $this->assertNull($violations[0]->getPlural()); $this->assertNull($violations[0]->getCode()); }
/** * Merges the constraints of the given metadata into this object. * * @param ClassMetadata $source The source metadata */ public function mergeConstraints(ClassMetadata $source) { foreach ($source->getConstraints() as $constraint) { $this->addConstraint(clone $constraint); } foreach ($source->getConstrainedProperties() as $property) { foreach ($source->getPropertyMetadata($property) as $member) { $member = clone $member; foreach ($member->getConstraints() as $constraint) { $constraint->addImplicitGroupName($this->getDefaultGroup()); } $this->addPropertyMetadata($member); if ($member instanceof MemberMetadata && !$member->isPrivate($this->name)) { $property = $member->getPropertyName(); if ($member instanceof PropertyMetadata && !isset($this->properties[$property])) { $this->properties[$property] = $member; } elseif ($member instanceof GetterMetadata && !isset($this->getters[$property])) { $this->getters[$property] = $member; } } } } }
/** * Extracts constraints from the property metaData * * @param string $property * @param ClassMetadata $metaData * @return array */ protected function extractPropertyConstraints($property, ClassMetadata $metaData) { $constraints = []; $propertyName = $this->convertToCamelCase($property); if ($propertyName) { $propertyMetaData = $metaData->getPropertyMetadata($propertyName); if ($propertyMetaData) { $propertyOptions = array_pop($propertyMetaData); $constraints = $propertyOptions->getConstraints(); } } return $constraints; }