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());
 }
Beispiel #2
0
 /**
  * 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;
 }